我仍然非常新对于外壳脚本(bash)...但是我已经写了我的第一个,它正在按预期运行。
我目前正在使用的是用sh name-of-script.sh >> /cron.log 2>&1
写入日志。但是,这将所有内容都写出来。非常适合调试,但现在我不需要。
我现在只想看到开始日期和时间以及结束日期和时间
我仍然想写信给cron.log,但只是如上所述的日期,但我似乎无法弄清楚如何做到这一点。有人可以将我指向正确的方向...从脚本内部或与我上面所做的类似?
一种简单的方法是添加类似的内容:
echo `date`: Myscript starts
到您的脚本顶部和
echo `date`: Myscript ends
底部和
echo `date`: Myscript exited because ...
无论何时出现错误。
围绕date
(不是普通引号)的背部引起的,导致date
命令的输出被插值到Echo语句中。
您可以将其包裹在功能等上,以使其变得更整洁,或者使用date -u
在UTC中打印,但这应该使您前进。
您在评论中询问如何避免其余的输出出现。
一个选项是将脚本中其他所有内容的输出和错误重定向到/dev/null
,通过将'>/dev/null 2>& 1'添加到输出某些东西或以其他方式使它们沉默的每一行中。例如
if fgrep myuser /etc/password ; then
dosomething
fi
可以写:
if fgrep myuser /etc/password >/dev/null 2>&1 ; then
dosomething
fi
虽然
if fgrep -q myuser /etc/password ; then
dosomething
fi
在这种情况下,更有效。
另一个选项是将date
包装器放入crontab条目中。类似:
0 * * * * sh -c 'echo `date`: myscript starting ; /path/to/myscript >/dev/null 2>&1; echo `date`: myscript finished'
最后,您可以使用子壳。将脚本的主体放入功能中,然后将其称为以输出重定向的子壳中。
#!/bin/bash
do_it ()
{
... your script here ...
}
echo `date`: myscript starting
( do_it ) >/dev/null 2>&1
echo `date`: myscript finished
尝试以下内容:
TMP=$(date); name-of-scipt.sh; echo "$TMP-$(date)"
或格式的date
TMP=$(date +%Y%m%d.%H%M%S); name-of-scipt.sh; echo "$TMP-$(date +%Y%m%d.%H%M%S)"