Ubuntu Shell: cron を使用して 3 つのスクリプトを連続して実行します。2 つ目のスクリプトはバックグラウンドで実行し続ける必要があります。

Ubuntu Shell: cron を使用して 3 つのスクリプトを連続して実行します。2 つ目のスクリプトはバックグラウンドで実行し続ける必要があります。

最近、管理しなければならないサーバーの 1 つで、次のようなシナリオに遭遇しました。これは音楽ストリーミング サーバーとして使用されている Ubuntu で、音楽はスケジュールに従って変更する必要がありますが、前のシステム管理者は 3 つのスクリプト (00-stop.sh、10-server.sh、および 20-client.sh) を使用して手動で変更していました。彼が使用/説明した手順は次のとおりです。

  1. 00-stop.sh スクリプトを実行してストリーミング サーバーを停止します。
  2. 20-client.sh スクリプト内のリストを変更します。
  3. バックグラウンドで実行し続けるには、「&」を使用して 10-server.sh を実行します。
  4. 更新されたリストで 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

関連情報