-1

ログ ファイルを監視しています (これは PBX キュー ファイルで、通話が着信したときに書き込まれ、発信者が電話を切ったかどうかなど、通話に何が起こったかの結果です)

ここに私が持っているものがあります:

while inotifywait -m -e close_write /var/log/asterisk/queue_log_test;
do
  if [ tail -n1 /var/log/asterisk/queue_log | grep EXITWITHTIMEOUT ];
    then
            php /usr/local/scripts/queue_monitor/pbx_queue_timeout.php
  elif [ tail -n1 /var/log/asterisk/queue_log | grep ABANDON ];
    then
            php /usr/local/scripts/queue_monitor/pbx_queue_abandon.php
  elif [ tail -n1 /var/log/asterisk/queue_log | grep COMPLETE ];
    then
            php /usr/local/scripts/queue_monitor/pbx_queue_complete.php
  else
    # Don't do anything unless we've found one of those
    :
  fi
done

ここで、スクリプトを実行すると、監視が正常に設定され、変更/終了が検出されます (MODIFY と CLOSE_WRITE の両方を試しましたが、どちらも機能します)。

Setting up watches.
Watches established.
/var/log/asterisk/queue_log_test CLOSE_WRITE,CLOSE

しかし、イベントは決してトリガーされません (私は inotify スクリプトの外で PHP スクリプトをテストしましたが、それらは見事に実行されます)

監視されているファイルを手動で実行すると、成功し、次のフレーズが見つかります。

[root@pbx ...local/scripts/queue_monitor]: tail /var/log/asterisk/queue_log_test
ABANDON
[Load: 0.00] [Time: 19:04:43]
[root@pbx ...local/scripts/queue_monitor]:

ここで何が欠けているのですか?

4

1 に答える 1

1

-mのスイッチを使用しているためinotifywait、無期限に実行されます。

   -m, --monitor
          Instead of exiting  after  receiving  a  single  event,  execute
          indefinitely.   The default behaviour is to exit after the first
          event occurs.

while ループは終了を待っているため、終了コードを評価して、ループを続行するかどうかを決定できます。

于 2015-10-05T00:37:48.543 に答える