使用 systemd 在 Ubuntu 18.04 上自动启动 Twonky 服务器

Auto-starting Twonky Server on Ubuntu 18.04 using systemd

我试图在 Ubuntu 上设置 Twonky 服务器。服务器工作正常,但我无法让 systemd 自动启动服务器(使用我在 /etc/systemd/system/twonkyserver.service 创建的服务文件)。有时我会收到神秘的错误消息,指出某些 PID-file (/var/run/mediaserver.pid) 无法访问,服务的退出代码是 13,这显然是一个 EACCES Permission denied 错误.该服务以根用户身份运行。

我终于通过将 twonkyserver.service 文件中的 PIDFile 设置为 /var/run/mediaserver.pid 来解决问题。作为参考,请在下面找到服务文件:

[Unit]
Description=Twonky Server Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/twonky/twonky.sh start
ExecStop=/usr/local/twonky/twonky.sh stop
ExecReload=/usr/local/twonky/twonky.sh reload
ExecRestart=/usr/local/twonky/twonky.sh restart
PIDFile=/var/run/mediaserver.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

如上所述,以下服务文件会在启动时自动启动 Twonky 服务器。只需使用 vim /etc/systemd/system/twonkyserver.service 创建它。这假设您已将 Twonky 服务器安装到 usr/local/twonky。 shell-文件 twonky.sh 已经为服务文件提供了一个很好的接口(twonky.sh start|stop|reload|restart,另见 twonky.sh -h)。

[Unit]
Description=Twonky Server Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/twonky/twonky.sh start
ExecStop=/usr/local/twonky/twonky.sh stop
ExecReload=/usr/local/twonky/twonky.sh reload
ExecRestart=/usr/local/twonky/twonky.sh restart
PIDFile=/var/run/mediaserver.pid
Restart=on-failure

[Install]
WantedBy=multi-user.target

我会稍微修改 twonky.sh 的启动和停止命令,并将它们直接放入 systemd 的 twonky.service 文件中:

[Unit]
Description=Twonky Server Service
After=network.target

[Service]
Type=simple

#Systemd will ensure RuntimeDirectory for the PID file is created under /var/run
RuntimeDirectory=twonky
PIDFile=/var/run/twonky/mediaserver.pid
# use the -mspid argument for twonkystarter to put the pid file in the right place
ExecStart=/usr/local/twonky/twonkystarter -mspid /var/run/twonky/mediaserver.pid -inifile /usr/local/twonky/twonkyserver.ini -logfile /usr/local/twonky/twonky.log -appdata /usr/local/twonky
ExecStop=kill -s TERM $MAINPID
ExecStopPost=-killall -s TERM twonkystarter
ExecStopPost=-killall -s TERM twonky
# Twonky 8.5.1 doesn't reload, it stops instead (on arm at least)
# ExecReload=kill -s HUP $MAINPID 

Restart=on-failure

[Install]
WantedBy=multi-user.target

您需要确保 ExecStart 命令中的路径匹配您解压 twonky 的位置,以及您想要 .pid 文件、配置、日志文件和 运行time 应用程序数据的位置,除非您对它们的默认位置感到满意.

将所有 into/etc/systemd/system/twonky.server 放入后,运行

sudo systemctl daemon-reload
sudo systemctl start twonky
sudo systemctl enable twonky