指定されたサービスが実行されたら、Upstartスクリプトを実行します。

指定されたサービスが実行されたら、Upstartスクリプトを実行します。

2つの起動スクリプトがあります。 1つはteampeakサーバーを起動することで、もう1つは以下のようにteampeakボットを起動することです。

チームスピーチサービス:

[Unit]
Description=Teamspeak Server
After=network.target

[Service]
WorkingDirectory=/home/teamspeak/
User=teamspeak
Group=teamspeak
Type=forking
ExecStart=/home/teamspeak/ts3server_startscript.sh start
ExecStop=/home/teamspeak/ts3server_startscript.sh stop
ExecReload=/home/teamspeak/ts3server_startscript.sh restart
PIDFile=/home/teamspeak/ts3server.pid
RestartSec=15
Restart=always

[Install]
WantedBy=multi-user.target

tsbot.service

[Unit]
Description=Teamspeak Bot
After=network.target

[Service]
WorkingDirectory=/home/tsbot/
User=tsbot
Group=tsbot
Type=forking
ExecStart=/home/tsbot/jts3servermod_startscript.sh start
ExecStop=//home/tsbot/jts3servermod_startscript.sh stop
ExecReload=/home/tsbot/jts3servermod_startscript.sh restart
PIDFile=/home/tsbot/jts3servermod.pid
RestartSec=15
Restart=always

[Install]
WantedBy=multi-user.target

tsbot.serviceスクリプトがteampeak.serviceが正常に起動した後にのみ実行できるかどうかを知りたいです。After=network.target teamspeak.serviceスクリプトに追加しようとしましたが、成功しませんでした。

答え1

私はupstartの実際の経験がないので、upstart構文が間違っている場合は謝罪しますが、実際のbashスクリプトは堅牢でなければなりません。それがすることは、ループを実行してtsbotサービスを開始する前にteampeakサービスが実行されていることを確認することです(確認の間に5秒間待機)。

script
while true; do    
    if [[ $(pgrep teamspeak) ]]; then
        systemctl start tsbot.service
        break
    fi
    sleep 5
done
end script

関連情報