无法将 shell 脚本作为 systemd 服务运行

无法将 shell 脚本作为 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

重新启动机器。

相关内容