crontab 重定向错误日志 加上时间

(原文链接 http://ivhong.com/crontab-%E9%87%8D%E5%AE%9A%E5%90%91%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97-%E5%8A%A0%E4%B8%8A%E6%97%B6%E9%97%B4/)

在开发中,我们避免不了写crontab脚本来异步执行一些东西,一般设置crontab用下面的方法


*/1 * * * * commond > /tmp/t.log 2>&1



后面的 2>&1 代表把标准错误输出指向标准输出,意思是当commond异常退出时,把异常退出时的日志也写到 /tmp/t.log 下面,这时记录的日志是没有时间信息的,就是说日志里的数据没有办法知道是什么时候打印出来的。
下面通过一个shell来解决这件事,代码如下
#!/bin/bash


if [ $# -gt 1 ]; then
	istring=''
	#去掉回车
	date=`date | tr -s ["\n"]`
	for (( i = 2; i <= $#; i++ ))
	do
		string=$string" "${!i}
	done	
	c=$date": "$string
	echo "" >> $1
	echo $c >> $1
fi




把上面的代码放到根目录下,保存为 datecrontalog.sh


然后在crontab -e用下面的脚本代替
*/1 * * * *  commond 2>&1 | xargs $HOME/datecrontalog.sh /tmp/t.log


你可能感兴趣的:(shell,crontab)