Linux 定时任务 - crontab 命令格式详解
Linux 定时任务 - crontab 命令格式详解
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令,是互联网很常用的技术。
很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠。实际工作中,90%的程序都没必要花这么多时间和精力去解决上面的两个问题,只需要写好自己的业务逻辑,通过crond这个工业级程序去调度就行了,crond的可靠性,健壮性,大家应该是毫无疑问的。
一、cron服务安装
yum install crontabs //安装crontab service crond start //启动服务 service crond status //查看crontab服务状态 |
二、cron服务命令
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
例如: root查看自己的cron设置:crontab -u root -l root编辑自己的cron设置:crontab -u root -e |
当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
cron服务会每分钟检查一次/etc/crontab、/etc/cron.d/、/var/spool/cron文件下的变更。如果发现变化,就会下载到存储器中。
三、crontab配置
crontab执行定时任务,执行体可以是一条系统命令或者是自己写的一个脚本,同时也可以指派用户来执行。
方法1、使用crontab命令,例如添加一个新的或编辑已有的
# crontab -e |
就可以进入配置文件。此时配置crontab的执行者是当前登入用户,如果当前用户是root,需要为其他用户配置,可以使用
# crontab -e -u 用户名 或 # su 用户名 # crontab -e |
配置完成后,会在/var/spool/cron目录中生成与用户同名的文件,可以通过命令:crontab -l查询当前用户的定时任务。
这种方法有一个缺点,就是当前系统中配置的crontab不在一个配置文件中,让管理员不方便查询系统到底有多少个crontab。
方法2、直接在/etc/crontab文件中添加,不过需要是root身份。
# vi /etc/crontab |
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root
# For details see man 4 crontabs
# 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 |
要添加新的crontab,只需要在文件最后增加即可。注意这里面需要指定用户名;而方法1中则不需要,如果指定了,它会认为是命令的一部分,从而可能导致crontab执行失败。
如果服务器都是有root来管理,建议添加crontab使用方法2,这样系统中的所有计划任务都在一起,一目了然。
四、crontab命令详解
基本格式 : 第6列表示当前用户(值为root,若为普通用户忽略该列)
(*)代表所有可能的值,例如月份如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作 |
例子:
*/1 * * * * 每分钟执行 0 * * * * 每小时执行 0 0 * * * 每天执行 0 0 * * 0 每周执行 0 0 1 * * 每月执行 0 0 1 1 * 每年执行 |