Убить фоновый php скрипт (виртуальный хостинг) - PullRequest
8 голосов
/ 03 сентября 2011

Я создал скрипт, который работает в фоновом режиме, используя функцию ignore_user_abort ().Однако я был достаточно глуп, чтобы не вставлять какой-либо код, чтобы остановить выполнение сценария, и теперь он отправляет электронные письма каждые 30 секунд ...

Есть ли способ остановить сценарий?Я нахожусь на виртуальном хостинге, поэтому у меня нет доступа к командной строке, и я не знаю PID.

Ответы [ 4 ]

7 голосов
/ 05 сентября 2011

Есть ли способ остановить скрипт? Я нахожусь на виртуальном хостинге, поэтому у меня нет доступа к командной строке, и я не знаю 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";
    }  
}
5 голосов
/ 05 апреля 2015

Я пришел в эту тему Вчера! У меня по ошибке был бесконечный цикл на странице, которая не должна была посещаться, и которая увеличила мои I/O to 100 и CPU usage to 100 I/O из-за некоторого php errors, и он получал logged, а размер файла журнала был растущий за пределами того, что кто-либо может думать.

На моем shared hosting.

не работал ни один из вышеперечисленных трюков.

МОЕ РЕШЕНИЕ

  1. В cPanel перейдите к версии PHP (кроме текущей)

  2. Выберите любую версию PHP на данный момент.

  3. А потом Apply Changes.

ПРИЧИНА, ПОЧЕМУ ЭТО РАБОТАЛО

Сценарий, который имел бесконечный цикл с некоторыми ошибками php, был процессом, поэтому мне просто нужно было его убить, изменение версии php усилило перезапуск сервисов, таких как php и Apache, и поскольку перезапуск включал более ранние процессы, были убиты, и я был расслаблен как I/O и CPU использование стабилизировалось. Также я исправил эту ошибку, прежде чем вручную менять версию php :)

0 голосов
/ 22 сентября 2011

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

0 голосов
/ 05 сентября 2011

как вы развернули скрипт?конечно, вы можете просто удалить его (если это приемлемый вариант).в противном случае измените его и вставьте некоторую логику, чтобы разрешить ему отправлять почту один раз каждые n минут / часов / дней в зависимости от времени сервера?

re.остановка выполнения сценария (или, скорее, система пытается его выполнить), как вы запланировали его выполнение?это какой-то тип графического интерфейса для crontab или что-то?Разве вы не можете просто отменить то, что вы там сделали (если у вас нет доступа к командной строке / терминалу)?

rob ganly

...