Inicie o PHP-FPM com a opção raiz automaticamente

3

Eu estava tentando fazer o PHP-FPM executar um pool como root, mas parece que não consigo ajustar os parâmetros de inicialização do init.d.

Funciona ao iniciar o PHP-FPM a partir da CLI (com sudo php-fpm7.0 -DRy /etc/php/7.0/fpm/php-fpm.conf , mas não consigo fazer isso funcionar com o comando service ( sudo service php7.0-fpm (re)start . Então, toda vez que o servidor é reinicializado, o PHP-FPM falha e Eu teria que executar este comando.

Eu tentei colocar um arquivo "php-fpm7.0" em /etc/default com a linha DAEMON_ARGS="--daemonize --fpm-config $CONFFILE -R" , e até tentei adicionar o parâmetro -R à função do_start em /etc/init.d/php7.0-fpm diretamente, mas continuo recebendo o erro please specify user and group other than root .

Existe alguma maneira de fazer isso funcionar na inicialização e com o comando service ?

Off topic: Conheço todos os riscos e sei porque não devo fazê-lo, mas quero mesmo assim. Eu preciso executar alguns scripts para criar diretórios, executar comandos chown etc. e o pool será dedicado a um backend usado por um bloco de servidor nginx que é alcançável de dentro da rede privada 192.168.1.X somente em um caminho de URL específico.

Como alternativa, eu poderia configurar um cron script que executa um script PHP como root, mas essa abordagem me custaria muito mais horas.

    
por redelschaap 08.07.2016 / 14:08

2 respostas

3

Eu finalmente encontrei uma solução. Descobriu-se que o Ubuntu estava usando systemd para iniciar e reiniciar o PHP-FPM e estava ignorando os arquivos init.d .

Se você tiver problemas com ajustes nos arquivos init.d que estão sendo ignorados e estiver no Ubuntu 15.04 ou posterior, há grandes chances de que o serviço também tenha um arquivo de serviço systemd .

Portanto, a correção para o meu problema: Meu sistema tem um arquivo chamado /lib/systemd/system/php7.0-fpm.service , que é usado por systemd . Com o comando cat /lib/systemd/system/php7.0-fpm.service você pode ver o conteúdo do arquivo de serviço. Você substitui php7.0-fpm.service pelo nome do seu arquivo de serviço. O arquivo de serviço do PHP7.0-FPM é assim:

[Unit]
Description=The PHP 7.0 FastCGI Process Manager
Documentation=man:php-fpm7.0(8)
After=network.target

[Service]
Type=notify
PIDFile=/run/php/php7.0-fpm.pid
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

No meu caso, precisei ajustar a regra ExecStart . Nós não temos que editar este arquivo, porque o systemd oferece uma maneira de sobrescrever regras específicas. O comando sudo systemctl edit php7.0-fpm.service abrirá um editor no qual você poderá inserir essas regras. Basta digitar a (s) seção (ões) da (s) regra (s) que você deseja ajustar e salvar o arquivo. No meu caso, parece assim:

[Service]
ExecStart=
ExecStart=/usr/sbin/php-fpm7.0 --allow-to-run-as-root --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf

Certifique-se de redefinir a regra que deseja editar primeiro, caso contrário, ambas as regras serão executadas. Além disso, certifique-se de executar sudo systemctl daemon-reload após salvar este arquivo. No meu caso, a execução de pools como root agora é permitida no Ubuntu 16.04.

    
por 10.07.2016 / 18:57
5

Em sistemas systemd, você pode ter que configurar isso via systemd ao invés de scripts init do sistema V

As etapas abaixo são testadas e estão funcionando no Ubuntu 16.04 LTS. E este é o seu culpado por scripts de inicialização redirecionados:

/lib/lsb/init-functions.d/40-systemd

1. Editar a configuração do seu pool php-fpm, por ex. /etc/php/7.0/fpm/pool.d/www.conf e configure o root como usuário / grupo como root

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = root
group = root

2. Edite /lib/systemd/system/php7.0-fpm.service e anexe -R à variável ExecStart para permitir que o serviço seja executado como raiz

ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf -R

3. Recarregue a configuração

$ systemctl daemon-reload

4. Comece o serviço

$ systemctl start php7.0-fpm

5. Confira

$ ps auwx | grep php
root     32061  0.0  0.0 221680 26084 ?        Ss   16:59   0:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
root     32063  0.0  0.0 221680  4992 ?        S    16:59   0:00 php-fpm: pool www
root     32064  0.0  0.0 221680  4992 ?        S    16:59   0:00 php-fpm: pool www
    
por 10.07.2016 / 23:14