这是我在 ubuntu 16.04 上的 systemd 服务:
[Unit]
Description=Starts Caspar CG
[Service]
Type=forking
WorkingDirectory=/home/broadcastingza/CasparCG/Server
Environment=DISPLAY=:0
ExecStart=/bin/sh ./run.sh --watch
StandardOutput=null
Restart=on-failure
[Install]
WantedBy=multi-user.target graphical.target
编辑:这是 sudo systemctl status -l 的输出
sudo systemctl status start-caspar.service -l
● start-caspar.service - Starts Caspar CG
Loaded: loaded (/etc/systemd/system/start-caspar.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-03-21 17:04:28 SAST; 1 day 16h ago
Process: 5198 ExecStart=/bin/bash -c ./run.sh --watch (code=exited, status=0/SUCCESS)
Mar 21 17:04:14 ZAPS001 systemd[1]: Starting Starts Caspar CG...
Mar 21 17:04:28 ZAPS001 systemd[1]: Started Starts Caspar CG.
该服务已启用并运行良好。手动启动也没有问题。我遇到的唯一问题是,一旦 shell 脚本运行(“run.sh”),它启动的服务器就会收到 EXIT 信号,并以 EXIT 代码 0 退出。这几乎就像服务器需要控制台始终打开。
当我从控制台运行完全相同的脚本时,它运行得很好。
有没有办法在不立即退出控制台的情况下启动服务,或者有没有办法首先独立于控制台启动服务?
答案1
我向大家道歉。这似乎是我尝试无头运行的二进制文件中的一个已知问题(casparcg)。看:https://github.com/CasparCG/Server/issues/529
建议的解决方法是安装 screen(或 tmux)以在分离模式下运行终端。我已经使用屏幕让它工作了。
安装画面:
sudo apt install screen
这是安装后在 systemd 服务中使用的代码行:
screen -d -m /path/to/your/script.sh
-d 分离终端,-m 忽略 $STY。
相应地调整 systemd 服务:
[Unit]
Description=Starts Caspar CG
[Service]
Type=forking
Environment=DISPLAY=:0
StandardOutput=null
ExecStart=/bin/sh -c "screen -d -m /usr/bin/start_caspar.sh" --watch
Restart=on-failure
User=broadcastingza
[Install]
WantedBy=multi-user.target graphical.target
我现在可以分离地运行服务器。
谢谢您的帮助!