计划任务,就是规划好的会在预计的时间去执行的任务。在linux系统中使用crond服务来完成这项工作,我们可以把cron设置为开机时自动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。
0、crond计划任务相关的命令、配置
名称 | 类型 | 说明 |
---|---|---|
crontab | 命令 | crontab命令,可以创建、编辑、删除某个用户的定时任务 |
/etc/crontab | 文件 | 系统计划任务的全局配置文件 |
/var/spool/cron/ | 目录 | 存放以用户名命名的用户计划任务配置文件,通过crontab命令编辑 |
/etc/cron.deny | 文件 | 设置哪些用户不能使用crontab功能 |
/etc/cron.hourly/ | 目录 | 存放每个小时执行一次的脚本 |
/etc/cron.daily/ | 目录 | 存放每天执行一次的脚本 |
/etc/cron.monthly/ | 目录 | 存放每月执行一次的脚本 |
/etc/cron.weekly/ | 目录 | 存放每周执行一次的脚本 |
/etc/cron.d/ | 目录 | 系统自动定期需要执行的任务文件 |
注意:
1、通过crontab命令添加某个用户的计划任务后,会在/var/spool/cron目录下生成以该用户名为名称的文件,crontab命令编辑的就是该文件。
2、crond服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用 crond服务做一些事情。用crontab命令配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。
1、查看系统是否安装了crondtab
rpm -qa|grep crontab
2、查看是否启动了crond服务
ps -ef|grep crond
或service crond status
3、如何启停crond服务
- 启动
/etc/init.d/crond start
或service crond start
- 停止
/etc/init.d/crond stop
或service crond stop
- 重启
/etc/init.d/crond restart
- 重新载入配置文件(一般设置计划任务后执行,可以立即生效,不用等系统去读配置文件)
/etc/init.d/crond reload
4、设置crond服务开机自启动
chkconfig crond on
5、crontab命令使用说明
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab) 编辑用户计划任务
-l (list user's crontab) 列出用户的计划任务的详细内容
-r (delete user's crontab) 删除用户的计划任务(指删除该用户的所有计划任务,强烈建议使用-ir)
-i (prompt before deleting user's crontab) 删除用户的计划任务前进行提示
-s (selinux context)
示例1:编辑当前登录用户的计划任务
crontab -e
示例2:列出test用户的计划任务
crontab -l test -e
6、计划任务文件的格式
* * * * * command
分 时 天 月 周 要执行的命令
符号 | 说明 |
---|---|
分 | 表示分钟,可以是0~59之间的任意整数 |
时 | 表示小时,取值范围[0~23] |
天 | 取值范围[1~31] |
月 | 取值范围[1~12] |
周 | 取值范围[0~7],0或7代表星期日 |
command | 要执行的命令,可以是系统命令,也可以是自己编写的脚本 |
* | 表示每的意思,例如分的位置为*,表示每分钟都要执行,表示0~59所有值 |
, | 分隔符,当对应域取多个值时使用,例如分钟域的“1,3”表示每小时的1分和3分钟执行计划任务 |
- | 表示时间范围,例如2-6表示"2,3,4,5,6" |
/ | 可以用来指定时间的间隔,例如“*/5”用在分钟域时表示每5分钟执行依次 |
示例1:每天0点0分时,执行test脚本
0 0 * * * test.sh
示例2:每3小时执行一下test脚本
* */3 * * * test.sh
示例3:周一到周五的0点0分执行test脚本
0 0 * * 1-5 test.sh