no se pudo iniciar el servicio

15

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 startme da:

Error al iniciar mine.service.Unit mine.service no encontrado

--- ACTUALIZACIÓN -----

Corro primero sudo systemctl daemon-reloady ahora no me da ningún mensaje, pero el servicio aún no se inicia.

Jorge
fuente
10
¿Has corrido systemctl daemon-reloaddespués de crear tu archivo de unidad?
Wieland
@Wieland: Hmm ... Ahora no me muestra ningún mensaje, pero todavía no se inicia.
George
@don_crissti: el estado dice que está activo, pero el script (en ExecStart) no se ejecuta.
George
¿Cómo sabría el $ HOME adecuado? ¿Qué esperas que sea para un servicio del sistema?
Serge
@Serge: Hmm ... Entonces, ¿cómo puedo usar $ HOME?
George

Respuestas:

14

$HOMEseñ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 forkingopció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/biny 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 opciones User=y Group=en el archivo de servicio.

Si desea ejecutarlo como su usuario, es mejor poner el archivo de servicio ~/.config/systemd/user/e iniciarlo / habilitarlo systemctl --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.

Michael Daffin
fuente
: Pongo el script en / usr / local / bin y el servicio en /.config/systemd/user. Si trato de habilitar el servicio, me muestra "argumentos en exceso". Si intento usar systemctl, muestra "fallido ... unidad ... ', algo así.
George
¿Puede proporcionar los comandos completos que intentó y registros más detallados? Es difícil de depurar con fragmentos.
Michael Daffin
: ¿Hay una solución para usar la ruta $ HOME? Porque, si pongo el script en / usr / local / bin, usa rutas relativas a $ HOME. Vi esto . Y traté de poner HOME=$HOMEel primer archivo de entorno. Pero el servicio no pudo iniciarse, no hubo errores.
George
1
en ubuntu Tuve que usar systemctl para esto no systemd, usando systemd recibí un error "Argumentos en exceso"
Alexander Mills
1
@AlexanderMills Tienes razón, el comando correcto en systemctl y systemd fue solo un error tipográfico en la respuesta.
Michael Daffin