Este é um trabalho muito adequado systemd
.
Executando um script como um serviço systemd
Se o seu sistema estiver executando o systemd , você poderá configurar seu script para ser executado como um serviço systemd que fornece controle sobre o ciclo de vida e o ambiente de execução, além de pré-condições para iniciar o script, como a rede em funcionamento.
A pasta recomendada para seus próprios serviços é /etc/systemd/system/
(outra opção é/lib/systemd/system
mas que normalmente deve ser usada apenas para serviços OOTB).
Crie o arquivo, por exemplo, com sudo vim /etc/systemd/system/autossh.service
:
[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
Agora você pode testar o serviço:
sudo systemctl start autossh
Verificando o status do serviço:
systemctl status autossh
Parando o serviço:
sudo systemctl stop autossh
Depois de verificar se o serviço funciona conforme o esperado, ative-o com:
sudo systemctl enable autossh
NOTA: Por questões de segurança, systemd
o script será executado em um ambiente restrito, semelhante à maneira como os crontab
scripts são executados, portanto, não faça suposições sobre variáveis de sistema preexistentes, como $ PATH. Use as Environment
chaves se seu script precisar de variáveis específicas a serem definidas. Adicionar set -x
na parte superior do script bash e depois executar systemctl status my_service
pode ajudar a identificar por que o script está falhando. Como regra geral, sempre use caminhos absolutos para tudo echo
, inclusive , ou defina explicitamente seu $ PATH adicionando Environment=MYVAR=abc
.