Intereting Posts
Как узнать, какой класс является экземпляром объекта? (php5) php пустой или пустой? Лучший способ полностью уничтожить сеанс – даже если браузер не закрыт Не загружать расширение Firebird Magento: как загрузить продукт по всем его данным, поскольку он используется в админ Настройка скрипта PHP как службы Windows Путаница с регулярным выражением CodeIgniter: 404 Страница не найдена после нажатия для сервера php_excel07- как исправить min heigth и mak для роста высоты на основе содержимого ячейки Предельная длина PHP каждой строки в массиве Отправка электронной почты с помощью PHP и обеспечение ее блокировки Как настроить PHP для отображения подробных ошибок вместо страницы с ошибкой 500? как удалить тег и его содержимое с помощью регулярного выражения? Использует ли порядок использования приложения функциональность в PHP? Кэширование вывода HTML с помощью PHP

Использовать PHP для запуска / перезапуска процесса

Я создал скрипт 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 или он просто вернется к жизни.