http://blog.csdn.net/wang350/article/details/51558016
在开发中,我们避免不了写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