30

我的脚本如下

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,此脚本每分钟运行一次。它检查某个程序是否正在运行,如果是,很好,如果不是,启动它。

现在,如果脚本发现 ./program 正在运行,我想在每次脚本运行到 Debug.log 时附加时间戳。所以在这then条线下,我补充说:

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

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

4

3 回答 3

45

请注意,您正在输出到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
于 2013-10-10T14:15:54.387 回答
3

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

于 2013-10-02T10:57:13.410 回答
0

正如@{fedorqui 'SO stopharing'} 所提到的,使用>>附加到日志文件的末尾。

或者,这也会将日志限制为 1MB:

tail -c 1MB fail.log; echo $(date) run script > file.log
于 2022-02-23T13:11:03.747 回答