我有一個bash腳本,它使用inotify-tools處理某些數據,以瞭解特定事件何時發生在文件系統上。如果在bash控制檯中運行,它會正常工作,但是當我嘗試將其作爲守護程序運行時,它會失敗。我認爲原因在於,inotifywait
命令調用的所有輸出都轉到一個文件,因此| while
之後的部分不再被調用。我該如何解決這個問題?這是我的腳本。使用inotify-tools作爲守護進程處理數據
#!/bin/bash
inotifywait -d -r \
-o /dev/null \
-e close_write \
--exclude "^[\.+]|cgi-bin|recycle_bin" \
--format "%w:%&e:%f" \
$1|
while IFS=':' read directory event file
do
#doing my thing
done
所以,-d
告訴inotifywait
作爲守護程序運行,-r
遞歸地做到這一點,-o
是要保存輸出的文件。在我的情況該文件是/dev/null
,因爲我並不真正需要的輸出,除了命令後處理的部分(| while...
)
等一下,我知道,但我需要它在後臺運行,以便我可以關閉控制檯,註銷等,它應該仍然監視我的目錄。 –
這就是我的意思是「背景整個腳本」。你需要讓*腳本作爲守護進程運行,而不僅僅是'inotifywait'程序。 – larsks
但是手冊頁說這個「-d, - 守護進程 與--monitor相同,除了在後臺日志記錄事件 中運行到一個必須由--outfile指定的文件之外。意思是--syslog。 」 –