
最近、管理しなければならないサーバーの 1 つで、次のようなシナリオに遭遇しました。これは音楽ストリーミング サーバーとして使用されている Ubuntu で、音楽はスケジュールに従って変更する必要がありますが、前のシステム管理者は 3 つのスクリプト (00-stop.sh、10-server.sh、および 20-client.sh) を使用して手動で変更していました。彼が使用/説明した手順は次のとおりです。
- 00-stop.sh スクリプトを実行してストリーミング サーバーを停止します。
- 20-client.sh スクリプト内のリストを変更します。
- バックグラウンドで実行し続けるには、「&」を使用して 10-server.sh を実行します。
- 更新されたリストで 20-client.sh を実行すると、音楽のストリーミングが開始されます。
Cron オートメーションを使用して音楽を自動的に変更できると思いますが、その方法がわかりません。私のアイデアは、4 つのスクリプトを用意することです: 00-stop.sh 10-server.sh 20-client.sh (音楽リスト 1 を使用) 30-client.sh (音楽リスト 2 を使用)
そして、スケジュールに従って 20-client または 30-client のいずれかを実行します。各 cron ジョブは、最初に 00-stop.sh を呼び出し、次に 10-server.sh (バックグラウンドで実行) を呼び出し、最後に 20-client.sh または 30-client.sh のいずれかを呼び出します。
私は次のようなものを想像します:
0 10 * * 1 /path/00-stop.sh && /path/10-server.sh && /path/20-client.sh
問題は、2 番目のスクリプト (10-server.sh) をバックグラウンドで実行し続ける必要があることです。どうすればそれができるでしょうか?
答え1
私は 1 つのスクリプトをまとめます:
#!/usr/bin/env bash
set -e # abort for any non-zero exit statuses
/path/00-stop.sh
/path/10-server.sh </dev/null >/dev/null 2>&1 &
disown
/path/20-client.sh
そうするとcronジョブは
0 10 * * 1 bash /path/refresh_music_server.sh