Skip to content

守护进程示例脚本

风起 edited this page Apr 5, 2024 · 10 revisions

Linux

以 systemd为例,创建 /lib/systemd/system/kodi-tmdb.service文件,内容如下:

[Unit]
Description=kodi metadata

[Service]
Type=simple
KillMode=process
User=download
LimitAS=infinity
LimitRSS=infinity
LimitCORE=infinity
LimitNOFILE=65536
ExecStart=/usr/local/bin/kodi-tmdb-linux-amd64 -config /usr/local/etc/kodi-tmdb.json
RestartSec=3
Restart=on-failure
LimitCORE=infinity

[Install]
WantedBy=default.target

然后执行:

systemctl daemon-reload 
systemctl start kodi-tmdb.service

语法参考:systemd (简体中文)

MacOS

创建文件 /Library/LaunchDaemons/kodi.tmdb.plist,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>fengqi.kodi.tmdb</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/kodi-tmdb-darwin-amd64</string>
      <string>-s</string>
      <string>/usr/local/etc/kodi-tmdb.json</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

然后执行命令:

cd /Library/LaunchDaemons/
sudo launchctl load fengqi.kodi.tmdb.plist.plist

Windows

参考 使用NSSM将exe封装为服务

群晖

参考:Synology NAS - How to make a program run at startup

Alpine Linux

创建文件 /etc/init.d/kodi-tmdb 内容如下:

#!/sbin/openrc-run

depend() {
    use logger dns
    need net
    after firewall
}

start() {
    ebegin "Starting kodi tmdb cli"
    start-stop-daemon -S -b -m -p /var/run/kodi-tmdb.pid -x /usr/local/bin/kodi-tmdb-linux-amd64 -- -config /usr/local/etc/kodi-tmdb.json
    eend $?
}

stop() {
    ebegin "Stopping kodi tmdb cli"
    start-stop-daemon --stop --pidfile /var/run/kodi-tmdb.pid
    eend $?
}

然后执行:

chmod +x /etc/init.d/kodi-tmdb
rc-update add kodi-tmdb
rc-update start kodi-tmdb

文档参考: Writing Init Scripts