Cronは自動的にbashスクリプトを実行し、1つのbashスクリプトを実行してから、他のスクリプトとの整合性チェックを実行します。

Cronは自動的にbashスクリプトを実行し、1つのbashスクリプトを実行してから、他のスクリプトとの整合性チェックを実行します。

そのため、サードパーティが開発したカスタム内部アプリケーションがあります。アプリケーションの実行中に「screen -ls」コマンドを使用して、アプリケーションが実行されていることを確認できます。画面がRailsとFreeswitchで動作している限り、アプリケーションが正しく実行されていることがわかります。

アプリケーション関連サービスを停止する特定のbashスクリプトと、アプリケーション関連サービスを開始する2番目のスクリプトがあります。

私の質問は、これら2つのスクリプトを組み合わせてアプリケーションを1つのスクリプトで再起動する方法です。次のように動作します。

  1. スクリプト1の実行 - アプリケーションの停止
  2. アプリケーションが閉じるまで待ちます(画面プロセスはもう実行されません)。
  3. スクリプト2の実行 - アプリケーションの起動
  4. アプリケーションが起動するまでお待ちください
  5. レールとプリスイッチングプロセスが実行されていることを確認するには、「スクリーン」ソケットを確認してください。そうでない場合は、手順1に戻って繰り返します。

次に、アプリケーションを再起動してください。

  1. /tools/stop_app.shを介して手動で停止スクリプトを実行しました。
    • その後、端末に出力してサービスが中断されたことを表示します。
    • 完了すると、端末プロンプトに戻ります。
  2. これで、/tools/start_app.sh から手動で起動スクリプトを実行します。
    • 何も出力されませんが、完了するとターミナルプロンプトに戻ります。
  3. その後、screen -lsを実行して、アプリケーションのすべてのサービスが実行されていることを確認しました。 (時にはfreeswitchなどのサービスが起動しないことがあります。)
  4. そうでない場合は、停止/開始スクリプトを再実行してください。

なぜ私がすべてをスクリプトに入れないのか尋ねることもできます。このカスタムアプリは非常に面倒で、開発者のサポートが限られているため、開発者が提供する正確なツールを使用する必要があります。したがって、1つのスクリプトは開発者が提供した2つの別々のスクリプトを呼び出します。

完全性チェックとは、RubyおよびFreeswitchスクリーンが実行されていることを確認するために「スクリーン」プロセスをチェックすることを意味します。 cronを使用して毎週このアプリケーションの再起動を自動化したいと思います。

bashスクリプトと言うとき、bashやshellと言うのが正しいかどうかはわかりません。 Ubuntu Linuxに通常デフォルトでインストールされている言語の場合、スクリプト設定はありません。

答え1

次のことができるはずです。

#/usr/bin/env bash

## We will use this function later to check if 
## everything has been correctly started.
function check_if_init_OK {
    ## You will need to edit this to add whatever services
    ## you have to check for.
    c=0; ## This is a counter, initialized to 0

    ## For each of the service names you are interested in.
    ## to add more, just put them after freeswitch, separated by a
    ## space they way they are now (e.g. a b c).
    for service in freeswitch foo bar baz; do

      ## Every time this loop is executed, $service will be
      ## one of the services you put in the list above. The
      ## script will run screen -ls and search for the name of the
      ## service. If it finds it, it will increment the counted $c by one.
      ## That is the meaning of '&&' in bash, x &&y means do y if x 
      ## was successful.
      screen -ls | grep $service >/dev/null 2>/dev/null && let c++; 
    done
    ## This just makes the function return $c which at this point
    ## will be how many of the the services you gave in the list have 
    ## been found.
    echo $c
}

## Run the first script -> stop app
script1.sh &

## Wait until it has stopped running
while screen -ls | grep script1.sh; do sleep 1; done 

## Run the second script -> start app and wait 15 seconds
script2.sh && sleep 15

## Check that everything has started OK. The function
## will return the number of services of interest that
## are up and running. While this is less than the number
## of services of interest, re-run script2.sh and check again.
## This loop will run the check_if_init_OK function until the 
## number returned (the number of running services of interest) is
## 3. You should change the 3 to reflect the actual number of services 
## you are looking for. So, as long as some services have not started,
## run script1.sh and then script2,sh and check if this time eveything
## has started OK. This loop will only exit when everything is working OK.
while [ "$(check_if_init_OK)" -ne 3 ];do
   script1.sh &&  script2.sh
done

関連情報