我的脚本如下
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输出任何内容。但它直接从命令行工作。为什么会这样,我可以解决这个问题吗?
答案 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)