Убить фоновый php скрипт (виртуальный хостинг)
Я создал скрипт, который работает в фоновом режиме, используя функцию ignore_user_abort(). Однако я был достаточно глуп, чтобы не вставлять какой-либо код для остановки скрипта, и теперь он отправляет электронные письма каждые 30 секунд...
Есть ли способ остановить сценарий? Я нахожусь на виртуальном хостинге, поэтому у меня нет доступа к командной строке, и я не знаю PID.
4 ответа
Есть ли способ остановить сценарий? Я нахожусь на виртуальном хостинге, поэтому у меня нет доступа к командной строке, и я не знаю PID.
Тогда нет.
Но вы уверены, что у вас нет доступа к оболочке? Даже через PHP? Если вы это сделаете, вы можете попробовать....
<?php
print `ps -ef | grep php`;
... и если вы можете определить процесс из этого, то....
<?php
$pid=12345; // for example.
print `kill -9 $pid`;
И даже если у вас нет доступа для запуска команд оболочки, вы можете найти pid в /proc (в системе linux) и завершить его, используя расширение 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";
}
}
Я пришел к этой теме Вчера! У меня по ошибке был бесконечный цикл на странице, которая не должна была посещаться, и это увеличило мой I/O to 100
а также CPU usage to 100
I/O
был из-за некоторых php errors
и это становилось logged
и размер файла журнала увеличивался выше, чем кто-либо мог подумать.
Ни один из вышеперечисленных трюков не помог мне shared hosting
,
МОЕ РЕШЕНИЕ
В cPanel перейдите к версии PHP (кроме текущей)
Выберите любую версию PHP на данный момент.
А потом
Apply Changes
,
ПРИЧИНА, ПОЧЕМУ ЭТО РАБОТАЛО
Скрипт с бесконечным циклом с некоторыми ошибками php был процессом, поэтому мне просто нужно было его убить, изменение версии php усилило перезапуск сервисов, таких как php и Apache, и, так как был задействован перезапуск, более ранние процессы были убиты, и я был расслаблен как I/O
а также CPU
использование стабилизировалось. Кроме того, я исправил эту ошибку, прежде чем вручную менять версию php:)
Просто. Позвоните в службу поддержки, отмените ее. В следующий раз не выполняйте то, что вы не можете контролировать.
Как вы развернули скрипт? конечно, вы можете просто удалить его (если это приемлемый вариант). в противном случае измените его и вставьте некоторую логику, чтобы разрешить ему отправлять почту один раз каждые n минут / часов / дней в зависимости от времени сервера?
число рейнольдса остановка выполнения сценария (или, скорее, система пытается его выполнить), как вы запланировали его выполнение? это какой-то тип графического интерфейса для crontab или что-то? Вы не можете просто отменить то, что вы там сделали (поскольку у вас нет доступа к командной строке / терминалу)?
ограбить Ганли