我有一個bash腳本,我希望它作爲一個守護程序運行,因爲它檢查一個條件確實有些工作,並休眠了一段時間並重復循環。爲bash腳本設置日誌
I demonize the script as : nohup myScript.sh &
我如何設置的日誌記錄,因爲它有它打印一些語句,以及如何確保我有腳本的PID,如果我想以後殺死它同樣回聲命令相同的腳本。
任何人都可以建議我怎麼能達到同樣的
我有一個bash腳本,我希望它作爲一個守護程序運行,因爲它檢查一個條件確實有些工作,並休眠了一段時間並重復循環。爲bash腳本設置日誌
I demonize the script as : nohup myScript.sh &
我如何設置的日誌記錄,因爲它有它打印一些語句,以及如何確保我有腳本的PID,如果我想以後殺死它同樣回聲命令相同的腳本。
任何人都可以建議我怎麼能達到同樣的
如果你看一下在Advanced Bash-Scripting Guide的I/O重定向章,然後你看,你可以通過做一些像所有的輸出到文件重定向,在你的腳本的頂部:
exec 2>&1
exec 1>>out.log
第一行標準錯誤重定向到標準輸出,第二行追加標準輸出到out.log。如果你這樣做,那麼你可以使用echo將特定的消息寫入日誌文件,並且所有未被禁止的命令的輸出也將被寫入日誌文件。
Bash有很多特殊變量,您可以在Special Shell Variables reference card中獲得這些概述。其中之一是$$
,其中包含腳本PID。爲了節省這一點,你可以做到以下幾點:
echo $$ > ${0}.pid
這將創建一個文件名<file name of script>.pid
,包含腳本的PID。
將以下行放在腳本的開頭。它節省了PID的更新版本:
nohup myScript.sh > myScript.log &
殺死腳本後:
kill -9 `cat myScript.pid`
echo $$ > myScript.pid
啓動腳本捕獲輸出記錄(從的nohup手冊頁例子)
簡單myScript.sh示例:
#!/bin/bash
echo $$ > myScript.pid
while :; do echo "Hello"; sleep 1; done
可能'echo $$> $ {0} .pid' - >'echo $$>/suitable/path/$(basename $ 0).pid'會很有用。但取決於用戶的方便。 – anishsane
那麼我該如何安排我的腳本,它會是這樣的:'nohup myScript.sh> /script.log&'你可以請解釋一步。 –
謝謝,它工作正常。 –