Intereting Posts
PHP xpath содержит класс и не содержит класс Типы PHP / Mime – Список доступных типов mime? как разрешить пользователям входить в UPDATE / EDIT их настройки / информацию о профиле Я не могу получить свою форму для подключения, чтобы правильно взаимодействовать с базой данных mySQL Предупреждение: session_start (): не удается отправить cookie сеанса – уже отправленные заголовки (вывод запущен в Создание оттенков серого с помощью библиотеки GD ImageMagick – текст в прямоугольник PHP: переупорядочить массивы после unset () Вложенный JSON из 3 таблиц один-ко-многим Запись изображений из API facebook: я думаю, что некоторые Array «Key» или Json Encode являются причиной Внешний url получить изображение PHP – содержимое массива lookup с синтаксисом точки Как добавить запятые к номерам в PHP Любые предложения по улучшению моего класса соединений PDO? PHP: печать неопределенных переменных без предупреждения

Как остановить скрипт PHP, работающий на фоне

Я начал этот процесс (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 = "xxxxxxxxx@gmail.com"; $subject = "Hello Richie"; $header = "From: me@xxxxxxxxx.org"; $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); ?> 

но теперь я хочу остановить это. Он отправляет сотни писем в мой Gmail a / c. Это на веб-сервере, где я не могу перезапустить его, чтобы убить процесс.

Есть ли способ выполнить другой файл, чтобы убить процесс или как мне это сделать?

Solutions Collecting From Web of "Как остановить скрипт PHP, работающий на фоне"

Если у вас нет доступа к оболочке, то единственный способ – попросить администратора сервера убить процесс.

При этом существует простой способ настроить сценарий и разрешить его отмену из любого другого скрипта на том же сервере, как показано ниже:

 <?php // at start of script, create a cancelation file file_put_contents(sys_get_temp_dir().'/myscriptcancelfile','run'); // inside the script loop, for each iteration, check the file if ( file_get_contents(sys_get_temp_dir().'/myscriptcancelfile') != 'run' ) { exit('Script was canceled') ; } // optional cleanup/remove file after the completion of the loop unlink(sys_get_temp_dir().'/myscriptcancelfile'); // To cancel/exit the loop from any other script on the same server file_put_contents(sys_get_temp_dir().'/myscriptcancelfile','stop'); ?> 

Я предполагаю, что у вас нет доступа к оболочке. Я подозреваю, что самый простой способ – связаться с администратором и перезапустить Apache. Они не хотят, чтобы этот бег больше, чем вы.

Один из вариантов мог бы попытаться убить все процессы Apache с помощью PHP. Он отправит сигнал об удалении всем процессам Apache, за исключением того, на котором он работает. Это может работать, если процесс Apache работает под общим процессом без setuid (). Попытайтесь на свой страх и риск.

 <?php $cpid = posix_getpid(); exec("ps aux | grep -v grep | grep apache", $psOutput); if (count($psOutput) > 0) { foreach ($psOutput as $ps) { $ps = preg_split('/ +/', $ps); $pid = $ps[1]; if($pid != $cpid) { $result = posix_kill($pid, 9); } } } ?> 

Следующее остановит фоновый процесс (PHP):

 sudo service apache2 stop 

Чтобы снова запустить apache:

 sudo service apache2 start 

Чтобы просто перезапустить apache:

 sudo service apache2 start 

Если вы начали использовать его в фоновом режиме, используйте ps aux | grep time.php ps aux | grep time.php чтобы получить PID. Тогда просто kill PID . Если процесс запущен на переднем плане, используйте его, чтобы прервать его.

Если процесс начался в Apache, перезапустите Apache (перезапуск /etc/init.d/apache2 для Debian). Если процесс начался с CGI-подобного сервера, перезапустите сервер.

Чтобы остановить выполнение скриптов php, вы можете просто ввести следующую команду в своем терминале. Это запустит службу Apache. (окончательный перезапуск службы php).

 sudo service apache2 restart 

Возможно, вы захотите включить таймаут в свои скрипты в будущем.

Вы можете убить процесс apache. Попробуйте запустить что-то вроде apachectl stop а затем apachectl start начнет его восстановление. Это убьет ваш сервер в течение определенного периода времени, но также будет следить за тем, чтобы все процессы, зависящие от этого скрипта, исчезли.