如何输出Shell脚本的启动和停止DateTime(但没有其他日志)



我仍然非常新对于外壳脚本(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)"

最新更新