2013-10-02 114 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)