使用 crontab 实现计划任务

crontab 介绍

Linux crontab 是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。
如果系统没有预装 crontab,可以使用以下命令安装 :  

yum install crontabs
systemctl enable crond (设为开机启动)
systemctl start crond(启动crond服务)
systemctl status crond (查看状态)

实现一个计划任务

1. 编辑配置文件

打开并编辑配置

vi /etc/crontab

添加计划任务

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 21 * * * root /git.sh

格式说明 :

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

即:

分钟(0-59) 小时(0-23) 日(1-31) 月(11-12) 星期(0-6,0表示周日) 用户名 要执行的命令
*/30 * * * root /usr/local/mycommand.sh (每天,每30分钟执行一次 mycommand命令)
* 3 * * * root /usr/local/mycommand.sh (每天凌晨三点,执行命令脚本,PS:这里由于第一个的分钟没有设置,那么就会每天凌晨3点的每分钟都执行一次命令)
0 3 * * * root /usr/local/mycommand.sh (这样就是每天凌晨三点整执行一次命令脚本)
*/10 11-13 * * * root /usr/local/mycommand.sh (每天11点到13点之间,每10分钟执行一次命令脚本,这一种用法也很常用)
10-30 * * * * root /usr/local/mycommand.sh (每小时的10-30分钟,每分钟执行一次命令脚本,共执行20次)
10,30 * * * * * root /usr/local/mycommand.sh (每小时的10,30分钟,分别执行一次命令脚本,共执行2次)

2. 保存生效

2.1 保存文件并退出;
2.2 加载任务,使之生效:crontab /etc/crontab

注意事项

1. 执行权限

注意 sh 脚本的执行权限, sh 编程相关教程 :
https://www.lessocode.work/courses/61d1629430881.html

2. 环境变量问题

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

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