Я использую стек LEMP и хочу написать для него простую панель управления.
Итак, я хочу иметь возможность перезагрузить php-fpm
из PHP-скрипта. Чтобы добиться этого, это то, что я сделал.
Создал двоичную оболочку в c
как это PHP-shell.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CMN_LEN 100
int main(int argc, char *argv[])
{
char cmd[MAX_CMN_LEN] = "", **p;
if (argc < 2)
{
fprintf(stderr, "Usage: ./php_shell terminal_command ...");
exit(EXIT_FAILURE);
}
else
{
strcat(cmd, argv[1]);
for (p = &argv[2]; *p; p++)
{
strcat(cmd, " ");
strcat(cmd, *p);
}
system(cmd);
}
return 0;
}
Эта программа была скомпилирована следующим образом:
gcc php_shell.c -o php_shell
Затем я добавил пользователя nginx в sudo visudo
как это:
Defaults:nginx !requiretty
nginx ALL=(ALL) NOPASSWD:/path/to/php_shell
Затем я выполнил команду в php-скрипте так:
var_dump(shell_exec('sudo /path/to/php_shell "service nginx restart" 2>&1'));
Как только я запускаю этот скрипт php script, я получаю 502 Gateway Error
и похоже все php-fpm
процессы были убиты, и он не запускается снова.
Есть идеи? Я делаю это неправильно? Я хочу добиться того же для nginx (т.е. иметь возможность перезапустить сервер nginx из php-скрипта, выполнив service nginx restart
). Как мне этого добиться?
Задача ещё не решена.
Других решений пока нет …