我仍然是shell脚本(bash)的新手......但是我已经编写了第一个脚本脚本并且按预期运行了。
我目前正在使用sh name-of-script.sh >> /cron.log 2>&1
写入日志。然而,这写出了一切。它非常适合调试,但现在我不需要它。
我现在只想查看开始日期和时间以及结束日期和时间
我仍然想写cron.log但只是写上面提到的日期但我似乎无法弄清楚如何做到这一点。有人能指出我正确的方向吗?要么是在剧本中,要么是类似于我上面所做的那样?
答案 0 :(得分:0)
一种简单的方法是添加类似:
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'添加到输出内容的每一行,否则让他们沉默。 EG
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'
最后,您可以使用子shell。将脚本的主体放入一个函数中,然后在子shell中调用它,并重定向输出。
#!/bin/bash
do_it ()
{
... your script here ...
}
echo `date`: myscript starting
( do_it ) >/dev/null 2>&1
echo `date`: myscript finished
答案 1 :(得分:0)
尝试以下方法:
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)"