Systemdは起動時にサービスに終了信号を送信します。

Systemdは起動時にサービスに終了信号を送信します。

これはUbuntu 16.04のシステムサービスです。

[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.

サービスがアクティブで正常に実行中です。手動起動も問題ありません。私が持っている唯一の問題は、シェルスクリプトが実行されると( "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

これでサーバーを分離して実行できます。

助けてくれてありがとう!

関連情報