Хорошо, это сложно (я думаю). Мне нужно перезагрузить php5-fpm из скрипта php. Очевидная проблема заключается в том, что после выполнения команды перезагрузки текущий скрипт нарушается, я пытался отложить выполнение вот так
(sleep 5; sudo service php5-php reload) & echo ""
но это не помогает, немедленный ответ nginx - 502 bad gateway. К вашему сведению, я использую php exec
функция
как-нибудь обойти это?
Убедитесь, что у пользователя, запускающего php, есть права sudo для перезагрузки php5-fpm, затем:
shell_exec("nohup sh -c 'sleep 1; sudo reload php5-fpm' > /dev/null 2>&1 &");
Было бы неплохо увидеть ваш php-код; чего вы пытаетесь достичь с помощью echo ""
?
В любом случае, вы можете попробовать это с помощью «sh -c» и «disown», например:
<?php
exec("sudo sh -c 'sleep 3 && service php5-fpm restart' >/dev/null 2>&1 & disown");
echo("done");
?>
«sudo» с exec () будет работать, только если вы поместите www-данные в файл sudoers, что является серьезной проблемой безопасности. Ты уверен?
Попробуйте ввести команду перезапуска в сценарий оболочки, начиная с периода ожидания. Таким образом, ваша функция php вызывает сценарий на сервере, а не перезапускает php напрямую. Таким образом, он не может убить себя.
Также проверьте этот ответ, чтобы узнать, как это можно сделать напрямую:
https://stackoverflow.com/questions/9798438/automatically-restart-php-script-on-exit
<?php
echo ++$argv[1]; // count every restart
$_ = $_SERVER['_']; // or full path to php binary
echo "\n======== start =========\n";
// do a lot of stuff
$cnt = 0;
while( $cnt++ < 10000000 ){}
echo "\n========== end =========\n";
// restart myself
pcntl_exec($_, $argv);
?>