Назад | Перейти на главную страницу

перезапустить php5-fpm из скрипта php

Хорошо, это сложно (я думаю). Мне нужно перезагрузить 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);
?>