¿Systemd no puede iniciar el script?

9

Tengo un script BASH que quiero ejecutar en el inicio. Mi sistema está ejecutando systemd, así que creé un archivo .service con lo que creo que es la información necesaria:

[Unit]
Description=My Script
After=network.target

[Service]
ExecStart=/home/myscript.sh

[Install]
WantedBy=multi-user.target

Usé systemctl enable para 'registrarlo' y reiniciarlo. En el arranque, me dijeron que mi script se ejecutaría, pero no pude ver ninguno de los mensajes que ECHO debería mostrar en la pantalla ni escribir algo en un archivo, de acuerdo con lo que había escrito en el script. Además, no inicia la aplicación que se supone que debe iniciar.

El estado de Systemctl me dice que la secuencia de comandos se ejecutó y salió correctamente. Aún así, el guión no tiene ningún efecto. Si ejecuto el script desde un shell, funciona perfectamente bien.

¿Alguno de ustedes sabe cuál podría ser mi problema?

TokyoMEWS
fuente
3
Aparentemente, si su script inicia algo más, necesita "Tipo = bifurcación". Me siento un poco estúpido por no perder el tiempo con la configuración.
TokyoMEWS
1
+1 para resolverlo. Publique su solución como respuesta y acéptela para ayudar a otras personas con el mismo problema.
terdon
1
@TokyoMEWS: Más precisamente, si el script inicia algo más y sale mientras sus hijos se están ejecutando, necesita "Tipo = bifurcación".
user1686

Respuestas:

7

Además de lo que TokyoMEWS encontró por sí mismo ...

Aparentemente, si su script inicia algo más, necesita "Tipo = bifurcación"

(que no es completamente correcto, Type=forkingsolo se hace necesario si su script sale mientras se ejecutan sus hijos )

... otros posibles problemas son:

  1. Supongo que por "mostrar en pantalla" querías decir que el script simplemente escribe algo en stdout. Esto no va a la pantalla durante el arranque; más bien, todo, desde la salida estándar de un servicio, se envía al diario (o al registro del sistema según la versión de su sistema).

  2. Si has hecho intento de escritura a la pantalla (por ejemplo, usando echo Hi >/dev/tty1), entonces es muy probable que la producción de la secuencia de comandos desaparece cuando agetty borra la pantalla antes de mostrar indicadores de conexión. (Para evitar eso, tendrías que pedir la unidad [email protected]).

  3. Para escribir algo en un archivo, debe tener el sistema de archivos montado lectura-escritura. Para esto, After=local-fs.target podría ser necesario, de lo contrario, la unidad podría iniciarse nuevamente demasiado pronto. Pero esto depende de la configuración específica del sistema operativo.

usuario1686
fuente
1

Si su script define la cláusula ExecStop también, debe establecer " RemainAfterExit = yes" para evitar que se llame a ExecStop automáticamente después de ExecStart . Esto permitirá que su servicio esté en estado " activo " después de ejecutar el comando ExecStart .

[Service]
ExecStart=/home/myscript.sh start
ExecStop=/home/myscript.sh stop
RemainAfterExit=yes
ibai
fuente