sudo strace -f -e trace=process service nginx status 2>&1 | grep systemctl
Estou tentando executar o Nginx usando o Systemd como gerenciador de processos.
Quando executo sudo service nginx start
e, em seguida, digito ps -aux | grep nginx
, parece que o mesmo processo está sendo executado quando comecei usando sudo systemctl start nginx
.
Este é o caso, que service
poderia ser mapeado para systemctl
? Como posso saber?
Quando olho para /etc/init.d/nginx
, o script é muito diferente da configuração em /lib/systemd/system/nginx.service
.
No entanto, se eu iniciar o nginx usando o comando systemctl
e depois pará-lo usando o comando service
que funciona bem. O mesmo na ordem inversa.
sudo strace -f -e trace=process service nginx status 2>&1 | grep systemctl
Como diz o ditado, "Há mais de uma maneira de gerar um arquivo". Nesse caso, não está absolutamente claro o que você quer dizer com "o mesmo processo em execução", então vou explicar os dois possíveis problemas.
Se o que você está querendo dizer é que você tem o mesmo ID de processo em execução se primeiro fizer um 'systemctl ngix start' e depois fazer um 'service ngix start'. Isso ocorre porque, se um daemon já estiver em execução, um processo de 'início' não será encerrado e iniciado um novo. Em tal situação, o resultado deve ser um não-op. Faça um parar antes de fazer um start subsequente, ou use um comando restart .
Se você fez uma parada (ou uma reinicialização) entre os dois start comandos, e você está vendo ngix rodando em ambos os casos - com os mesmos parâmetros para o comando, mesmo que o IDs de processo são diferentes, então o 'problema' é que, em ambos os casos, o objetivo final é obter o ngix em execução. As localizações dos arquivos de conteúdo e configuração não são alteradas. As opções que você deseja usar não mudam apenas porque programas diferentes as iniciam. É praticamente apenas um caso de "todos os caminhos levam a Roma".
Finalmente, se você suspeitar que systemctl e serviço são links para o mesmo arquivo, tente.
cmp 'which systemctl' 'which service'
Isso informará se systemctl e serviço contêm exatamente o mesmo código (e / ou links para o mesmo arquivo).
Eu começaria com which systemctl
e which service
e, em seguida, verificaria a saída de ls -l
para ambos para ver se eles são o mesmo arquivo (via symlink) ou parecidos (tamanho, etc).
Pelo menos aqui (Fedora 23) /usr/bin/systemctl
é um binário, /usr/sbin/service
é um script de shell que usa comandos systemd para emular o comando SysVinit.