2013-10-02 176 views
14

我的腳本如下添加時間戳登錄bash腳本

if ps ax | grep -v grep | grep ./program > /dev/null 
    then 
     exit 
    else 
     echo "---------------------------------------------------" >> Debug.log 
     echo "Starting program at: $(date)" >> Debug.log 
     ./program >> Debug.log 2>&1 
fi 
exit 

通過crontab文件,這個腳本運行的每一分鐘。它檢查某個程序是否正在運行,如果是,很好,如果沒有,啓動它。

現在我想每次腳本運行到Debug.log時追加時間戳,如果它發現./程序正在運行。所以下then行了,我說:

echo "Time: $(date)" >> Debug.log 

該命令沒有輸出任何東西的debug.log。它可以直接從命令行運行。爲什麼是這樣,我能解決這個問題嗎?

+1

不能告訴你爲什麼,但'date +'時間:%C「>> Debug.log'似乎是做你想做的事情,可能更透明和簡潔。 – tripleee

+0

另外,'grep thing | grep -v grep'通常可以重構爲像'grep [t] hing'這樣的想法是使用不匹配自己的正則表達式。 – tripleee

+2

注意你輸出到'Debug.log',而你應該指出該文件的完整路徑。 – fedorqui

回答

15

注意你輸出到Debug.log,而應註明滿該文件的路徑:echo "Time: $(date)" >> /path/to/Debug.log


一般來說,每當你想添加時間戳到日誌文件,你可以使用:

echo "Time: $(date). Some error info." >> /path/to/your/file.log 

date將擴大到像Fri Sep 9 12:18:02 CEST 2016。在這種情況下,你可能更願意使用一些date標誌有更多可分析日期:

$ date "+%FT%T" 
2016-09-09T12:18:23 

,或者甚至更好,使用ISO 8601格式:

$ date -Iseconds 
2016-09-09T12:18:23+0200 

一起:

echo "Time: $(date -Iseconds). Some error info." >> /path/to/your/file.log 
3

可能的原因是在終端和SH日期不同的路徑:嘗試使用到您直接在命令行中使用日期完整路徑,即$(/bin/date)