在开发中,我们避免不了写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 +%Y/%m/%d\ %H:%M:%S | 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