Intereting Posts
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: save () не может отправлять почту, используя функцию php mail Фильтровать коллекцию продуктов по двум категориям Magento 1.7 Php: Предупреждение: заголовок может содержать не более одного заголовка, а новая строка обнаружена в Выяснив, почему я получаю ошибку ID ресурса №5 Как «читать» HTML-документ в PHP? PHP Foreach Pass по ссылке: Дублирование последнего элемента? (Ошибка?) TransformationFailedException после обновления PHP 5.6.26 до 5.6.27 Рекомендации по предоставлению данных – PHPUnit Браузер заставляет загружать страницу php, когда я хочу открыть страницу Проблема с кодировкой URL-адреса страницы Laravel 5 Я хочу, чтобы мое поле принимало только целые числа, и я сохранил это поле в требуемой проверке? Получение элемента из массива 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 или он просто вернется к жизни.