Я создал скрипт php, который позволяет мне нажать кнопку, чтобы перезапустить скрипт PHP. Однако я не уверен, что это лучший способ сделать это. Вот его снимок: http://img.ruphp.com/php/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, чтобы перезапустить сервер входа. Я хочу каким-то образом использовать идентификатор процесса, чтобы я мог проверить, работает ли скрипт, а если нет, это позволит мне нажать кнопку «Перезапустить».
Благодарю.
Есть ли конкретная причина, по которой вы хотите сделать это вручную, а не автоматически? Не всегда ли сервер перезагружается?
Моим советом было бы автоматизировать это, либо используя 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
чтобы запустить цикл (либо через службу init, либо в сеансе отдельного экрана, как вы сейчас используете).
Если ваши скрипты PHP зависают или вы хотите перезагрузить их, потому что вы обновили свой код , вы можете просто убить run_login_server.sh
и цикл bash будет его run_login_server.sh
.
Это так же просто, как 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 или он просто вернется к жизни.