CentOS 7 定时计划任务设置及系统错误邮件处理

  • 概述
  • 安装crontabs服务并设置开机自启
  • 设置用户自定义定时任务
  • 保存生效
  • 运行出错怎么办


概述

在CentOS 7上可以利用crontab来执行计划任务, 依赖于 crond 的系统服务,这个服务是系统自带的,可以直接查看状态,启动,停止。

安装crontabs服务并设置开机自启

通过yum来进行安装。

yum install -y crontabs

安装完成后,我们设置开机自启动:

systemctl enable crond
systemctl start crond
systemctl status crond

其中,第一步是设为开机启动,第二步是启动crond服务,最后一步是查看当前状态。

设置用户自定义定时任务

运行以下命令

vi /etc/crontab

输出如下

Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed

可以看到,5个“*”分别对应着分钟、小时、日、月、星期。
举些例子:

  • */30 * * * * bash /root/mycommand.sh (每天,每30分钟执行一次 mycommand命令)
  • * 3 * * * bash /root/mycommand.sh (每天凌晨三点,执行命令脚本,PS:这里由于第一个的分钟没有设置,那么就会每天凌晨3点的每分钟都执行一次命令)
  • 0 3 * * * bash /root/mycommand.sh (这样就是每天凌晨三点整执行一次命令脚本)
  • */10 11-13 * * * bash /root/mycommand.sh (每天11点到13点之间,每10分钟执行一次命令脚本,这一种用法也很常用)
  • 10-30 * * * * bash /root/mycommand.sh (每小时的10-30分钟,每分钟执行一次命令脚本,共执行20次)
  • 10,30 * * * * bash /root/mycommand.sh (每小时的10,30分钟,分别执行一次命令脚本,共执行2次)

我有个需求是每天凌晨4点自动运行一次Python脚本,因此我的命令是:

0 4 * * * python3 /root/mypython.py

保存生效

加载任务,使之生效:

crontab /etc/crontab

查看任务:

crontab -l

列出用户的定时任务列表:

crontab -u 用户名 -l

P.S. 特别注意,crond的任务计划,并不会调用用户设置的环境变量,它有自己的环境变量,当你用到一些命令时,比如mysqldump等需要环境变量的命令,可能手动执行脚本时是正常的,但用crond执行的时候就会不行,这时你要么写完整的绝对路径,要么将环境变量添加到/etc/crontab中。

如果计划任务执行的语句是多条,则需要用到shell脚本。自己先写一个shell脚本,然后在计划任务中,执行这个脚本即可。至于shell脚本的写法, 这里不再赘述。

运行出错怎么办

运行出错时,系统会自动给你发一封系统邮件。你在控制台上会经常收到这个消息:

You have new mail in /var/spool/mail/root

中文环境下的提示是:

您在 /var/spool/mail/root 中有新邮件

关闭提示的方式请自行搜索。不过我倒觉得没必要关闭,因为这是出错的提示,关闭了你可能就不知道自己出错了。

查看邮件的方法:

cat /var/spool/mail/root