0

ファイルが 11:30 から 11:40 の間の任意の時間に到着するというシナリオがあります。ファイルが到着したかどうかを確認するスクリプトを 11:30 に実行するようにスケジュールできます。これが私が持っているものです。

i=0
while [ i -eq 0 ]
do
    if [ ! -f $File_Check_Dir/$FILE_NAME ] ; then
        echo " \n File has arrived at `date +'%d-%m-%Y %H:%M:%S'****" | tee -a ${LOGFILE}
        i=1
    fi
done

スクリプトをバックグラウンドで実行できます。しかし、systime をチェックして、ファイルが 11:40 ET まで到着しない場合はアラートを送信する必要があります。systime関数を試してみましたが、欲しいものを正確に得ることができません。

4

3 に答える 3

0

時間を取得してから、date +"%H:%M"「if」をもう 1 つ追加して、これが 11:40 より大きいかどうかを確認し、適切な通知を送信した後に終了できます。

于 2013-07-02T06:10:15.020 に答える
0

これを行うためのいくつかの推奨される方法:

  1. inotifywaitinotify をサポートするシステムで実行している場合は、(Debianパッケージの)などのツールを使用しinotify-toolsて、監視しているディレクトリ/ファイルへの変更がすぐに通知されるようにします。-t指定したタイムアウト期間内にアクションが発生しない場合、タイムアウトするオプションを使用できます。このツールを使用する場合、シェル スクリプト内のファイルの存在を確認してからinotifywaitコマンドを実行するまでの競合状態に注意する必要がある場合があります。

  2. コマンドを使用してスクリプトをラップしますtimeout。例えば。timeout 10m my-watch-script. スクリプトが終了する前にタイムアウトが発生した場合は、timeout終了コード 124 が返されます。これをテストして、タイムアウトが発生したかどうか、またはファイルが見つかったかどうかを判断できます。

  3. bash を使用している場合は、組み込みSECONDS変数をループ条件の一部としてテストし、タイマーが切れたら終了します。bash が利用できない場合、代わりにdateコマンドを使用して、出力を数秒でフォーマットします。この回答を参照してください。

現状では、提示されたコードは非常にタイトなポーリング ループで実行されます。sleepをどこかに入れておくとよいでしょう。

于 2013-07-02T06:20:10.507 に答える