2011-09-03 20 views
6

Ho creato uno script che viene eseguito in background utilizzando la funzione ignore_user_abort(). Tuttavia, sono stato abbastanza stupido da non inserire alcun tipo di codice per fermare lo script e ora sta inviando e-mail ogni 30 secondi ...Kill background php script (hosting condiviso)

C'è un modo per fermare lo script? Sono in un hosting condiviso, quindi non ho accesso al prompt dei comandi e non conosco il PID.

+0

hai accesso SSH? –

+2

Usa 'sistema' per eseguire'/bin/ps' e trova il PID del processo incriminato, quindi ['posix_kill'] (http://ca.php.net/manual/en/function.posix-kill.php) per ucciderlo. Forse il tuo provider di hosting condiviso ha un pannello di controllo di qualche tipo con strumenti di gestione dei processi. –

+3

Se questo è un evento singolare, dovresti semplicemente chiamare il supporto ... – Olaf

risposta

0

come è stato distribuito lo script? sicuramente puoi semplicemente rimuoverlo (se è un'opzione accettabile). altrimenti modificarlo e inserire qualche logica per consentire solo di inviare una mail una volta ogni n minuti/ore/giorni in base al tempo del server?

ri. arrestando lo script dall'esecuzione (o meglio dal sistema che sta tentando di eseguirlo) come lo hai programmato per l'esecuzione? è un tipo di gui per un crontab o qualcosa del genere? non puoi semplicemente annullare ciò che hai fatto lì (visto che non hai accesso alla riga di comando/terminale)?

rubare Ganly

4

Esiste un modo per fermare lo script? Sono in un hosting condiviso, quindi non ho accesso al prompt dei comandi e non conosco il PID.

Quindi no.

Ma sei sicuro di non avere alcun accesso alla shell? Anche tramite PHP? Se lo fai, si potrebbe provare ....

<?php 

print `ps -ef | grep php`; 

... e se è possibile identificare il processo da quella poi ....

<?php 

$pid=12345; // for example. 
print `kill -9 $pid`; 

E anche se non si dispone di l'accesso per eseguire comandi di shell, si può essere in grado di trovare il pid in/proc (su un sistema Linux) e terminarlo utilizzando l'estensione POSIX ....

<?php 

$ps=glob('/proc/[0-9]*'); 
foreach ($ps as $p) { 
    if (is_dir($p) && is_writeable($p)) { 
     print "proc= " . basename($p); 
     $cmd=file_get_contents($p . '/cmdline'); 
     print "/" . file_get_contents($p . '/cmdline'); 
     if (preg_match('/(php).*(myscript.php)/',$cmd)) { 
      posix_kill(basename($p), SIGKILL); 
      print " xxxxx...."; 
      break; 
     } 
     print "\n"; 
    } 
} 
0

Semplicemente. Chiama il supporto, fallo annullare. La prossima volta, non eseguire qualcosa che non puoi controllare.

1

Sono venuto a questa discussione Ieri! Ho avuto per errore un ciclo infinito in una pagina che non doveva essere visitato, e che aumentato la mia I/O to 100 e CPU usage to 100I/O era a causa di qualche php errors ed è stato sempre logged e log file di dimensioni è in aumento al di là qualcuno può pensare.

Nessuno dei suddetti trucchi ha funzionato sul mio shared hosting.

mia soluzione

  1. In cPanel, andare a PHP versione (esclusi quelli della corrente)

  2. Selezionare qualsiasi versione di PHP per momento.

  3. E quindi Apply Changes.

MOTIVO perché ha funzionato

Il copione che aveva loop infinito con alcuni errori PHP è stato un processo così ho solo bisogno di ucciderlo, cambiando versione di PHP rafforzare il riavvio dei servizi come PHP e Apache, e come il riavvio è stato coinvolto in precedenza i processi sono stati uccisi, e mi sono rilassato come I/O e CPU utilizzo stabilizzato. Inoltre, ho corretto quell'errore prima di cambiare la versione del php :)

+1

Hai appena salvato la mia giornata .. Grazie amico –

Problemi correlati