Este es un trabajo muy adecuado para systemd
.
Ejecutar un script como un servicio systemd
Si su sistema ejecuta systemd , puede configurar su script para que se ejecute como un servicio systemd que proporciona control sobre el ciclo de vida y el entorno de ejecución, así como las condiciones previas para iniciar el script, como la red en funcionamiento.
La carpeta recomendada para sus propios servicios es /etc/systemd/system/
(otra opción es /lib/systemd/system
pero que normalmente debería usarse solo para servicios OOTB).
Cree el archivo, por ejemplo, con 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
Ahora puedes probar el servicio:
sudo systemctl start autossh
Comprobación del estado del servicio:
systemctl status autossh
Detener el servicio:
sudo systemctl stop autossh
Una vez que haya verificado que el servicio funciona como se esperaba, habilítelo con:
sudo systemctl enable autossh
NOTA: Por razones de seguridad systemd
, ejecutará el script en un entorno restringido, similar a cómo crontab
se ejecutan los scripts, por lo tanto, no haga suposiciones sobre variables del sistema preexistentes como $ PATH. Use las Environment
teclas si su script necesita variables específicas para ser definidas. Agregar set -x
en la parte superior de su script bash y luego ejecutarlo systemctl status my_service
podría ayudar a identificar por qué su script falla. Como regla general de tumb, siempre use rutas absolutas para todo echo
, incluso , o defina explícitamente su $ PATH agregando Environment=MYVAR=abc
.