Comment arrêter un script PHP exécuté en arrière-plan
J'ai commencé ce processus (time.php)
<?php
ignore_user_abort(true); //run script in background
set_time_limit(0); //run script forever
$interval = 300; //do every 1 minute...
do
{
//add the script that has to be ran every 1 minute here
//...
$to = "[email protected]";
$subject = "Hello Richie";
$header = "From: [email protected]";
$body = "Hello Richard,\n\n"
. "I was just testing this service\n\n "
. "Thanks! ";
mail($to, $subject, $body, $header);
sleep($interval); //wait 5 minutes
} while(true);
?>
mais maintenant, je veux l'arrêter. C'est d'envoyer des centaines de mail à mon Gmail a/c. C'est sur un serveur web sur lequel je ne peux pas redémarrer pour tuer le processus.
Est-il un moyen d'exécuter un autre fichier de tuer le processus, ou comment dois-je faire?
source d'informationauteur Richie
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas accès au shell, alors le seul moyen est de demander au serveur administrater de tuer le processus.
Cela étant dit, il ya un moyen facile de configurer un script et lui permettre d'être annulé à partir de n'importe quel autre script sur le même serveur, comme suit:
Je suis en supposant que vous n'avez pas accès au shell. Je soupçonne que le plus simple est de contacter l'administrateur et demandez leur de redémarrer Apache. Ils ne veulent pas de cette course plus que vous.
Une alternative de tenter de tuer tous les processus Apache à l'aide de PHP. Il enverra un signal kill à tous les processus Apache, à l'exception de celui sur lequel il s'exécute. Cela peut fonctionner si l'Apache processus en cours d'exécution en vertu d'un processus partagé sans setuid(). Tentative à vos propres risques.
La suite va arrêter le processus en arrière-plan(PHP):
De démarrer apache, encore une fois:
Simplement de re-démarrer apache:
Si vous avez commencé à en arrière-plan utiliser
ps aux | grep time.php
pour obtenir le PID. Puis justekill PID
. Si le processus a commencé en avant-plan, l'utilisation de l'interrompre.Si le processus a commencé dans Apache, redémarrer Apache (/etc/init.d/apache2 restart pour Debian). Si le processus a commencé avec serveur CGI, redémarrez le serveur.
Pour arrêter votre php scripts en cours d'exécution, vous pouvez simplement entrer la commande suivante dans votre terminal. Cela va redémarrer le service Apache. (ultime redémarrage de votre php service).
Vous voudrez peut-être inclure délai d'attente à l'intérieur de vos scripts à l'avenir.
Vous pouvez tuer le processus apache en cours d'exécution. Essayez d'exécuter quelque chose comme
apachectl stop
et puisapachectl start
pour commencer vers le haut. Cela va tuer votre serveur pour une période de temps, mais il sera également vous assurer que tous les processus bloqués sur ce script va s'en aller.