これは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)をインストールすることです。画面を使って動作するようにしました。
インストール画面:
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
これでサーバーを分離して実行できます。
助けてくれてありがとう!