2011-09-03 17 views
6

Creé un script que se ejecuta en segundo plano utilizando la función ignore_user_abort(). Sin embargo, fui lo suficientemente tonto como para no insertar ningún tipo de código para detener el script y ahora está enviando correos electrónicos cada 30 segundos ...Kill background script php (alojamiento compartido)

¿Hay alguna forma de detener el script? Estoy en un alojamiento compartido, por lo que no tengo acceso al símbolo del sistema y no conozco el PID.

+0

¿tienes acceso SSH? –

+2

Use 'system' para ejecutar'/bin/ps' y encuentre el PID del proceso ofensivo, luego ['posix_kill'] (http://ca.php.net/manual/en/function.posix-kill.php) para matarlo. Tal vez su proveedor de alojamiento compartido tenga un panel de control de algún tipo que tenga herramientas de administración de procesos. –

+3

Si se trata de un evento singular, solo debe llamar al soporte ... – Olaf

Respuesta

0

¿cómo implementó el script? seguramente puede simplemente eliminarlo (si esa es una opción aceptable). de lo contrario, modifíquelo e inserte un poco de lógica para que solo le permita enviar un correo una vez cada n minutos/horas/días según la hora del servidor.

re. evitando que se ejecute el script (o más bien, el sistema que intenta ejecutarlo), ¿cómo lo programó para su ejecución? ¿Es algún tipo de guía para un crontab o algo así? ¿No puedes deshacer lo que hiciste allí (ya que no tienes acceso a la línea de comando/terminal)?

robar Ganly

4

¿Hay alguna manera de detener el guión? Estoy en un alojamiento compartido, por lo que no tengo acceso al símbolo del sistema y no conozco el PID.

Then no.

¿Pero está seguro de que no tiene ningún acceso de shell? Incluso a través de PHP? Si lo hace, podría intentar ....

<?php 

print `ps -ef | grep php`; 

... y si se puede identificar el proceso a partir de ese entonces ....

<?php 

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

E incluso si usted no tiene acceso a ejecutar comandos de shell, que puede ser capaz de encontrar el pid en/proc (en un sistema Linux) y cerrarlo mediante la extensión 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

simplemente. Llama al soporte, haz que se cancele. La próxima vez, no ejecutes algo que no puedas controlar.

1

Vine a este hilo ayer! Por error tenía un bucle infinito en una página que no se suponía que visitara y que aumentaba mi I/O to 100 y CPU usage to 100I/O debido a algunos php errors y estaba obteniendo logged y el tamaño del archivo de registro iba en aumento más allá de lo que cualquiera pueda pensar.

Ninguno de los trucos anteriores funcionó en mi shared hosting.

mi solución

  1. En cPanel, ir a la Versión PHP (excepto el de corriente)

  2. Seleccione cualquier versión de PHP por ser el tiempo.

  3. Y luego Apply Changes.

POR LO QUE FUNCIONÓ

El guión que tenía bucle infinito con algunos errores PHP fue un proceso así que sólo tenía que acabar con él, el cambio de versión de php reforzar el reinicio de los servicios como PHP y Apache, y como se reinició, los procesos anteriores se mataron, y me relajé como I/O y CPU uso estabilizado. Además, arreglé ese error antes de cambiar manualmente la versión de php :)

+1

Acabas de salvar mi día ... Gracias hombre –

Cuestiones relacionadas