シェルスクリプトを systemd サービスとして実行できない

シェルスクリプトを systemd サービスとして実行できない

MIDI 入力ノートをメディア機能 (音量を上げる、次の曲など) に変換する小さなスクリプトがあります。次のようになります。

#!/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

ターミナルから起動することはできますが、 を押すまでコマンドを受信できませんctrl+c。 ここまでは順調です。質問は、このスクリプトをサービスとして使用して、ターミナルに表示され、再起動時に実行されることを心配しなくて済むようにするにはどうすればよいかということです。

/etc/systemd/system/次の内容のサービス ファイルがあります。

[Unit]
Description=My Shell Script for Sync

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

[Install]
WantedBy=multi-user.target

答え1

再起動後もスクリプトを保存するには、

cd /opt/systemd/それからsudo chmod a+x YOURSCRIPTFILENAME

次のようなサービスを作成します

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

次に、次のように入力してファイルを編集しますsudo nano /etc/systemd/system/YOURSERVICENAME.service

[Unit]
Description=My Shell Script for Sync

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

[Install]
WantedBy=multi-user.target

次に、Ctrl + X で終了し、Y で保存し、Enter でファイルを書き込みます。

サービスをインストールし、起動時に読み込まれるようにするには、次のように入力します。

systemctl daemon-reload
systemctl enable YOURSERVICENAME.service

マシンを再起動します。

関連情報