Я начал этот процесс (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. Это на веб-сервере, где я не могу перезапустить его, чтобы убить процесс.
Есть ли способ выполнить другой файл, чтобы убить процесс или как мне это сделать?
Если у вас нет доступа к оболочке, то единственный способ – попросить администратора сервера убить процесс.
При этом существует простой способ настроить сценарий и разрешить его отмену из любого другого скрипта на том же сервере, как показано ниже:
<?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
начнет его восстановление. Это убьет ваш сервер в течение определенного периода времени, но также будет следить за тем, чтобы все процессы, зависящие от этого скрипта, исчезли.