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