如何输出shell脚本的开始和停止日期时间(但没有其他日志)?

时间:2014-02-01 13:00:35

标签: linux bash shell cron

我仍然是shell脚本(bash)的新手......但是我已经编写了第一个脚本脚本并且按预期运行了。

我目前正在使用sh name-of-script.sh >> /cron.log 2>&1写入日志。然而,这写出了一切。它非常适合调试,但现在我不需要它。

我现在只想查看开始日期和时间以及结束日期和时间

我仍然想写cron.log但只是写上面提到的日期但我似乎无法弄清楚如何做到这一点。有人能指出我正确的方向吗?要么是在剧本中,要么是类似于我上面所做的那样?

2 个答案:

答案 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)"