在bash脚本中添加时间戳到日志文件

时间:2013-10-02 10:43:43

标签: bash time

我的脚本如下

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时附加时间戳,如果它发现./program正在运行。所以在then行下,我添加了:

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

此命令不向Debug.log输出任何内容。但它直接从命令行工作。为什么会这样,我可以解决这个问题吗?

2 个答案:

答案 0 :(得分:24)

请注意,您输出的内容为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

答案 1 :(得分:3)

可能的原因是终端和sh中日期的路径不同:尝试使用直接从命令行使用的日期的完整路径,即$(/bin/date)