スクリプトは与えられた時間に一度だけ実行されます。

スクリプトは与えられた時間に一度だけ実行されます。

特定の時間に一度だけスクリプトを実行する必要があります。

方程式: - 初めてスクリプトが9時30分に実行されますが、誰かが930と945の間で自分のスクリプトを再実行しようとした場合(手動でまたは940の操作で)、実行しないでください。

if [ (${date} -gt "0930" && ${date} -lt "0945")  or (${date} -gt "1130" && ${date} -lt "1145")  ]  
then  
    write_log "Fetching data"  
    while read line   
    do  
        "does processing"  
    done < ${CONFIG_FILE}  
else  
    write_log "Its not time to fetch details."  
fi  

ベストアンサー1

最後の実行日をファイルに保存できます。

date +"%s" > last_file

last_fileファイル名は次のとおりです。たとえば、これはエポックの開始後の秒数を記録します。 1549605438. これがあれば読むことができます:

read last < last_file

これはlastシェル変数名です。これを得たら、比較する算術が必要です。

threshold=900 # 60 * 15 = 15 minutes
[ "$(date +'%s')" -gt "$((last + threshold))" ] || exit

現在の2番目のカウントを最後のカウントに設定されている一時停止間隔を加算した値と比較します。時間が足りない場合は終了してください。それ以外の場合は、続行 - 残りのスクリプトを実行します。

最後に、両方のインスタンスが同じ方法で起動するのを防ぐには、いくつかのセマフォが必要です。プロセス2は、プロセス1が最後の実行日を確認し、それ自身の日付を書き込む前に開始される。

全体のアルゴリズムは次のとおりです。

  1. セマフォを設定します。
  2. 最後の実行時間を読みます。
  3. 承認されたら、独自のランタイムを作成してください。 (正しく作成した後は後で可能です。)
  4. このスクリプトに関連するタスクを実行します。
  5. セマフォを解放します。

スクリプトを初めて実行するまでは、last_file手動でスクリプトを挿入しない限り存在しないことに注意してください。したがって、そこに置くか、適切なロジックを使用してスクリプトを免疫するようにします。

おすすめ記事