通过Linux服务器中的PHP脚本重新启动PHP-FPM网关

时间:2015-10-25 23:10:00

标签: php linux nginx sudo

我正在运行LEMP堆栈并希望为它编写一个简单的控制面板。

所以,我希望能够从php脚本重启php-fpm。为实现这一目标,这就是我所做的。

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脚本,我就会得到502 Gateway Error,看起来所有php-fpm进程都已被终止,并且它没有重新启动。

有什么想法吗?我做错了吗?我想为nginx实现相同的目标(即能够通过执行service nginx restart从php脚本重启nginx服务器)。我怎样才能做到这一点?

0 个答案:

没有答案