Intereting Posts
Вывод инструкции Mysqli разбивает вставку изображения в базу данных Отладка 500 внутренних ошибок сервера на PHP, запущенных на кластере IIS7 Каков уровень включения функций в php? php загрузка больших файлов Как удалить файл, когда пользователь покидает страницу? PHP – Как сделать красивые URL-адреса с помощью mod_rewrite Генерация метатекстов Facebook Open Graph динамически Существует ли разница между тернарным оператором и условием? Zend Выберите NOT IN Ошибка маршрутизации, вызывающий контроллер на основе переменных в URL-адресе Laravel 4 Включить короткие короткие теги PHP через .htaccess Как создать большое (высокое качество 300 точек на дюйм) изображение из JSON / массив данных (ширина, высота, x, y, ангелы) с помощью PHP ImageMagic / Imagick Переменная Php в R Графическая диаграмма PHPExcel вызывает нечитаемое содержимое и диаграмму удалены перебирать свойства класса 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 или он просто вернется к жизни.