Eu tenho um arquivo de configuração inicial conforme mostrado abaixo que funciona bem no Ubuntu 14:
#/etc/init/data_server.conf
#sudo start data_server
#sudo stop data_server
#sudo status data_server
start on runlevel [2345]
stop on runlevel [016]
chdir /opt/hold/data_server
respawn
post-start script
echo "data server started at `date +"%F %T"` on `hostname -f`" | mailx -r "[email protected]" -s "data server Started" "[email protected]"
end script
post-stop script
sleep 30
end script
limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec ./data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Agora estamos mudando para o Ubuntu 16, então não podemos usar upstart
e parece que precisamos usar systemd
aqui. Quais são as mudanças que preciso fazer para escrever o script systemd
?
Eu tenho que ter certeza de que sempre que o sistema for reiniciado ou o aplicativo for encerrado, ele deverá iniciar meu systemd
script automaticamente, que por sua vez iniciará meu arquivo data server
.
Responder1
Seu script inicial mudará muito. Você não precisará especificar manualmente tantas diretivas, portanto também será muito mais curto.
Fazer com que um processo sempre inicie na inicialização e reinicie quando travar é apenas uma linha:
Restart=always
Não sei quantas alterações personalizadas você precisa manter, mas, no mínimo, parece que você precisa manter os comandos chdir
e .exec
Aqui está um exemplo de script systemd básico para seu aplicativo:
[Unit]
Description=My-service
[Service]
Type=simple
WorkingDirectory=/opt/hold/data_server
ExecStart=/path/to/data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Restart=always
[Install]
WantedBy=multi-user.target
Achei este um recurso útil ao escrever arquivos de unidades personalizadas:https://www.freedesktop.org/software/systemd/man/systemd.unit.html