crontab定时任务不执行

在生产环境下,添加了 crontab 定时计划任务,后面发现,定时任务并没有执行,在指定的文件夹下并没有相对应的日志产生。

关键词:crontab定时计划任务不执行

查看crontab服务状态

1
serivice cron status

其中若出现 (CRON) info (No MTA installed, discarding output)字样,说明linux系统中没有安装postfix。Postfix 是一种电子邮件服务器软件。当crontab执行脚本时,会将输出通过本地的文本邮件的方式传递给当前用户,传递的内容存放在/var/mail/<当前用户名>文件中。

1
2
sudo apt update
sudo apt install postfix -y

将标准错误和标准输出重定向到文件

当所有的输出重定向到文件以后,crontab就不会给本地用户发信息啦,也就解决了上节的问题。

为了将所有的输出都重定向到文件,可以在cron里写 */1 * * * * r.sh

r.sh里写 a.sh >> /root/a.log 2>&1

附录:linux重定向
1
2
3
4
5
6
7
8
9
10
11
12
13
command > filename      把标准输出重定向到一个新文件中
command >> filename      把标准输出重定向到一个文件中(追加)
command 1 > fielname      把标准输出重定向到一个文件中
command > filename 2>&1    把标准输出和标准错误一起重定向到一个文件中
command 2 > filename     把标准错误重定向到一个文件中
command 2 >> filename     把标准输出重定向到一个文件中(追加)
command >> filename 2>&1   把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2   把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename    把command命令以filename文件作为标准输入
command << delimiter   把从标准输入中读入,直至遇到delimiter分界符
command <&m    把文件描述符m作为标准输入
command >&m    把标准输出重定向到文件描述符m中
command <&-    把关闭标准输入

> 默认为标准输出重定向,与 1> 相同 2>&1 意思是把 标准错误输出 重定向到 标准输出.

&>file 意思是把标准输出标准错误输出 都重定向到文件file中

/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉