2013-10-07 67 views
2

我有一個bash腳本,我希望它作爲一個守護程序運行,因爲它檢查一個條件確實有些工作,並休眠了一段時間並重復循環。爲bash腳本設置日誌

I demonize the script as : nohup myScript.sh & 

我如何設置的日誌記錄,因爲它有它打印一些語句,以及如何確保我有腳本的PID,如果我想以後殺死它同樣回聲命令相同的腳本。

任何人都可以建議我怎麼能達到同樣的

回答

1

如果你看一下在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。

+1

可能'echo $$> $ {0} .pid' - >'echo $$>/suitable/path/$(basename $ 0).pid'會很有用。但取決於用戶的方便。 – anishsane

+0

那麼我該如何安排我的腳本,它會是這樣的:'nohup myScript.sh> /script.log&'你可以請解釋一步。 –

+0

謝謝,它工作正常。 –

1

將以下行放在腳本的開頭。它節省了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 
+0

我沒有得到,請你詳細說明。與我需要做的步驟 –

+0

這些步驟,現在是連續的順序。 – svante

+0

謝謝,它工作正常。 –