Systemd 在启动时向服务发送退出信号

Systemd 在启动时向服务发送退出信号

这是我在 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)以在分离模式下运行终端。我已经使用屏幕让它工作了。

  1. 安装画面:

    sudo apt install screen

  2. 这是安装后在 systemd 服务中使用的代码行:

    screen -d -m /path/to/your/script.sh

-d 分离终端,-m 忽略 $STY。

  1. 相应地调整 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

我现在可以分离地运行服务器。

谢谢您的帮助!

相关内容