默认情况下,使用
grep CRON /var/log/syslog
可以看到crontab的一些相关log,但是信息并不太多。你能看到crontab执行了哪个命令,但是看不到命令执行的输出信息。

如果希望看到crontab中执行的脚本或命令的输出信息及错误信息可以使用2>&1将这些信息输出到log文件。

首先解释一下:
2>&1
我们知道>和<是文件重定向符。那么1和2是什么?
在shell中,每个进程都和三个系统文件 相关联:标准输入stdin,标准输出stdout、标准错误stderr,三个系统文件的文件描述符分别为0,1,2。所以2>&1 的意思就是将标准错误也输出到标准输出当中。

所以在crontab中如果0点0分执行一个命令(例如python ~/myscript.py),需要看它的log可以这样做:

0 0 * * * python ~/myscript.py > /tmp/myscript.log 2>&1 

但是这样默认是没有时间戳的,如果你想加上时间戳,有如下几种方法:

1. 使用moreutilsts (本人推荐,简单明了)
sudo apt-get install moreutils

然后上述命令改写为:

0 0 * * * python ~/myscript.py 2>&1|ts > /tmp/myscript.log 
2. 使用脚本

新建一个~/predate.sh

#!/bin/bash
while read line ; do
    echo "$(date): ${line}"
done

那么上述命令可以改为:

0 0 * * * python ~/myscript.py 2> >( ~/predate.sh > /tmp/myscript.log )
3. 把predate.sh直接写在命令行中:
0 0 * * * python ~/myscript.py 2> >( while read line; do echo "$(date): ${line}"; done > /tmp/myscript.log )

参考文献:

  1. shell - How to add timestamp to STDERR redirection - Stack Overflow
  2. Linux Shell 1>/dev/null 2>&1 含义
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐