He creado un servicio systemd:
[Unit]
Description=My service
[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Alias=mine.service
Lo puse en la carpeta / etc / systemd / system y lo llamé mine.service.
Si corro sudo service mine start
me da:
Error al iniciar mine.service.Unit mine.service no encontrado
--- ACTUALIZACIÓN -----
Corro primero sudo systemctl daemon-reload
y ahora no me da ningún mensaje, pero el servicio aún no se inicia.
systemctl daemon-reload
después de crear tu archivo de unidad?Respuestas:
$HOME
señala al directorio de inicio del usuario que ejecuta el script. Los servicios de Systemd se inician con root, por lo que probablemente lo intente/root/theFolder/run.sh
. Use rutas absolutas en los archivos de servicio.También tienes la
forking
opción establecida. Esto es necesario para los programas que se ejecutan en segundo plano, ¿su script hace esto? La mayoría no lo hace, y si la suya no lo hace, debe eliminar esta opción o systemd estará esperando que su script termine para reclamarlo como iniciado.También se desaconsejan los archivos de servicio del sistema que apuntan a scripts en su directorio de inicio y posiblemente un problema de seguridad. Dado que se ejecutan como root, cualquier persona que pueda modificarlos puede obtener acceso root a su computadora. Es mucho mejor copiar la secuencia de comandos
/usr/local/bin
y asegurarse de que es propiedad y solo se puede escribir por root para detener esto. También es una buena idea ejecutar el script como un usuario sin privilegios utilizando las opcionesUser=
yGroup=
en el archivo de servicio.Si desea ejecutarlo como su usuario, es mejor poner el archivo de servicio
~/.config/systemd/user/
e iniciarlo / habilitarlosystemctl --user enable yourservice && systemctl --user start yourservice
(tenga en cuenta, ejecutar como su usuario no root). Consulte esto para obtener más información sobre los archivos de servicio del usuario.fuente
HOME=$HOME
el primer archivo de entorno. Pero el servicio no pudo iniciarse, no hubo errores.