Я использовал скрипт cron (написанный на PHP, а не выполняемый с веб-сервера), чтобы проверить работоспособность сервера и перезапустить его.
Однако я бы не стал делать это из процесса, созданного на сервере, потому что вы знаете, что собираетесь убить родительский процесс, что плохо сказывается на ребенке.
Самый простой способ - получить файл / tmp / RESTART_APACHE, который может создать PHP и который проверяет скрипт cron. Если скрипт cron видит файл / tmp / RESTART_APACHE, тогда он правильно перезапускает Apache.
Использование скрипта cron приведет к задержке (до 60 с, если вы запускаете ее каждую минуту), но помимо этого она должна работать как вы хотите.
В зависимости от того, как вы собираетесь это использовать, это может помочь.
(Возможно, вы хотите использовать каталог, отличный от / tmp /, чтобы установить разрешения и запретить кому-либо на сервере создавать файл.)
РЕДАКТИРОВАТЬ: Пожалуйста, смотрите комментарий Аарона Н к этому сообщению. Я согласен с тем, что он говорит: вы действительно хотите быть осторожным, чтобы возможность перезапуска вашего веб-сервера не была общедоступной службой.
Ограничить доступ к системе, которая может вызвать перезагрузку; убедитесь, что файл, запускающий перезапуск, имеет ограниченные разрешения, поэтому только веб-процесс может создать этот файл и, как правило, быть умным.