Используйте PHP для запуска / перезапуска процесса - PullRequest
0 голосов
/ 17 июля 2011

Я создал скрипт php, который позволяет мне нажимать кнопку, чтобы перезапустить скрипт PHP. Тем не менее, я не уверен, лучший способ сделать это. Вот снимок этого: http://i51.tinypic.com/2niz32o.png

У меня сейчас есть это:

if(isset($_POST['login_restart']))
{
    $command = exec("/usr/bin/php /var/www/html/login_server.php >/dev/null &");
    $pid = exec("nohup $command > /dev/null 2>&1 & echo $!");
    $info = "Login server started...PID: $pid";
}

Однако, похоже, это не работает. Мне это нужно, чтобы при нажатии кнопки «Перезагрузка» он запускал сервер входа и продолжал работать. Я использовал экранную функцию в SSH, однако я не хочу продолжать входить в SSH, чтобы перезапустить сервер авторизации. Я хочу как-то использовать идентификатор процесса, чтобы я мог проверить, запущен ли скрипт, и если нет, он позволит мне нажать кнопку «Перезагрузить».

Спасибо.

1 Ответ

3 голосов
/ 17 июля 2011

Есть ли конкретная причина, по которой вы хотите сделать это вручную, а не автоматически?Разве это не тот случай, когда сервер всегда должен быть перезапущен?

Мой совет будет автоматизировать это, либо с помощью cron проверять состояние вашего скрипта через регулярные интервалы, либо bash бесконечный циклбессмертие сценария.

Сначала создайте сценарий запуска, чтобы для удобства вызывать ваш PHP, и назовите его run_login_server.sh (не забудьте chmod + x, чтобы его можно было выполнить):

#!/bin/bash
/usr/bin/php /var/www/html_login_server.php > /dev/null

Затем создайте login_server_daemon.sh, чтобы запустить ваш скрипт в бесконечном цикле (опять же, chmod +x, чтобы сделать его исполняемым):

#!/bin/bash
while :
do
  ./run_login_server.sh # or any command line to be executed forever
done

NB. Я не задокументировал процесс php в приведенном выше bash скрипт.Это работает, потому что цикл bash будет вызывать php каждый раз, и цикл будет повторяться только после смерти php.Просто выполните login_server_daemon.sh, чтобы запустить цикл (либо через службу инициализации, либо в отдельном сеансе экрана, который вы используете сейчас).

Если ваши PHP-скрипты зависают или вы хотите перезагрузить их, потому чтоВы обновили свой код , вы можете просто убить зацикленный процесс - run_login_server.sh и цикл bash возродит его.

Это так же просто, как killall run_login_server.sh, что вы можете сделать с помощью php's exec. Обратите внимание, что вы должны быть осторожны с пользовательскими разрешениями того, кто что выполнил : если вы выполняете login_server_daemon.sh как your_username, но php работает как php_username, тогда php не будет иметь права на killall ваш процесс.

Наконец, если вы не можете выбрать между cron и script подходами, вот несколько факторов, которые следует учитывать:

Сценарий должен жить вечно и умрет только в случае 1)явно убит, 2) bash каким-то образом отключается и умирает в цикле while, что, я сомневаюсь, произойдет, и 3) происходит катастрофа на всей машине, и в этом случае остановка вашего маленького bash-скрипта - наименьшее из ваших беспокойств.Бонус в сценарии заключается в том, что перезапуск происходит сразу после смерти php (или чего-либо, что вы хотите вызвать в бесконечном цикле).

cron проблема в том, что он может проверять не более одного раза в минуту в большинстве случаев.частая настройка, если вы действительно заботитесь о немедленном выздоровлении.Это вызывает дополнительное раздражение, что если вы решите остановить скрипт, вам также придется удалить его из вашего crontab, или он просто вернется к жизни.

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