No se puede ejecutar un script de shell como servicio systemd

No se puede ejecutar un script de shell como servicio systemd

Tengo un pequeño script para transformar notas de entrada midi en funciones multimedia (subir volumen, siguiente canción, etc.). Se parece a esto:

#!/bin/bash
aseqdump -p "CMD MM-1" | \
while IFS=" ," read src ev1 ev2 ch label1 data1 label2 data2 rest; do
    case "$ev1 $ev2 $data1" in
        "Note on 32" ) xdotool key XF86AudioRaiseVolume ;;
        "Note on 31" ) xdotool key XF86AudioLowerVolume ;;
        "Note on 51" ) xdotool key XF86AudioMute ;;
        "Note on 28" ) xdotool key XF86AudioPrev ;;
        "Note on 29" ) xdotool key XF86AudioNext ;;
        "Note on 50" ) xdotool key XF86AudioPlay ;;
    esac
done

Puedo iniciarlo desde la terminal y sigue sin poder recibir comandos hasta que presiono ctrl+c. Hasta ahora, todo bien. Mi pregunta es, ¿cómo puedo usar este script como un servicio para no tener que preocuparme de que esté en una terminal visible y se ejecute al reiniciar?

Tengo un archivo de servicio /etc/systemd/system/con el siguiente contenido:

[Unit]
Description=My Shell Script for Sync

[Service]
ExecStart=/bin/bash /usr/bin/midi2keys.sh

[Install]
WantedBy=multi-user.target

Respuesta1

Para sobrevivir al reinicio, debe guardar su script en

cd /opt/systemd/entoncessudo chmod a+x YOURSCRIPTFILENAME

luego crea un servicio como

sudo touch /etc/systemd/system/YOURSERVICENAME.service

Luego edite el archivo escribiendo sudo nano /etc/systemd/system/YOURSERVICENAME.servicey luego escribiendo:

[Unit]
Description=My Shell Script for Sync

[Service]
ExecStart=/bin/bash /usr/bin/midi2keys.sh

[Install]
WantedBy=multi-user.target

luego Ctrl + X para salir, Y para guardar e ingresar para escribir el archivo.

Ahora, para instalar el servicio y asegurarse de que se cargue en el momento del arranque, escriba:

systemctl daemon-reload
systemctl enable YOURSERVICENAME.service

reinicie la máquina.

información relacionada