Eu tenho resolvido esse problema há algum tempo. Consultou a web, várias plataformas de troca de pilha e fóruns de discussão. Aqui está a descrição do meu problema:
Usecase:
Eu tenho o naviserver instalado em um mac os x el capitan 10.11.6
Em vez de ligar
/usr/local/ns/bin/nsd -f -u nsadmin -g nsadmin -t /usr/local/ns/conf/nsd-config.tcl
para iniciar o servidor e um comando kill para parar o servidor Eu gostaria de gerenciá-lo através de um LaunchDaemon.
Descrição do problema:
Eu posso iniciar com sucesso um LaunchDaemon por meio de launchctl
. No entanto, quando observando a lista launchctl
, ela lista o plist sem um PID. Portanto, preciso parar o serviço manualmente por meio de kill
- em vez disso, gostaria de poder interromper o serviço com launchctl stop
.
Pergunta em essência:
Por que o launchctl não lista o PID do LaunchDaemon iniciado com sucesso?
O que tentei até agora
- Alterando o arquivo plist, minimizando parâmetros, sem KeepAlive, sem OnDemand, inclua o parâmetro Program
- Alterando as propriedades administrativas: roda nsadmin: nsadmin admin: root
- Executando como LaunchAgent através do diretório / Library / LaunchAgents
Aqui está o que eu fiz:
Eu tenho o seguinte plist em /Library/LaunchDaemons/org.naviserver.dev01.plist
<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=“1.0”>
<dict>
<key>Label</key>
<string>org.naviserver.dev01</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/ns/bin/nsd</string>
<string>-u</string>
<string>nsadmin</string>
<string>-g</string>
<string>nsadmin</string>
<string>-t</string>
<string>/usr/local/ns/conf/nsd-config.tcl</string>
</array>
<key>StandardOutPath</key>
<string>/usr/local/var/log/naviserver_daemon.log</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/naviserver_daemon.log</string>
</dict>
</plist>
Os seguintes privilégios e propriedades aplicam-se
-rw-r--r-- 1 root admin 857 Aug 11 15:03 org.naviserver.dev01.plist
Iniciando o serviço funciona
sudo launchctl load org.naviserver.dev01.plist
sudo launchctl start org.naviserver.dev01
No entanto, a lista launchctl não mostra o PID do serviço
sudo launchctl list | grep naviserver
- 0 org.naviserver.dev01
Eu posso encontrar o processo em execução via
ps -ax | grep nsd
Atualmente, estou sempre reiniciando manualmente o servidor por meio de kill
via PID, o que não é legal. Eu gostaria de gerenciar isso por meio de launchctl
, que funciona com o início do processo, mas não com a interrupção dele novamente.
Alguém mais se deparou com esse problema e há algo obviamente errado com a minha abordagem, que eu posso mudar para resolver esse problema?