Skip to content

crontab

linux下面定期分为二部分,一部分是后台程序 crond,一部分是 crontabcrond 输入指令的接口。

crontab 命令用于安装、删除或者列出用于驱动 cron 后台进程的表格。也就是说,用户把需要执行的命令序列放到 crontab 文件中以获得执行,每个用户都可以有自己的 crontab 文件。

利用 crontab 编写 shell 脚本程序,定时执行 php 相关程序。在这个过程中,经常使用到的 crontab 命令如下:

(root权限下)

crontab启动: /etc/init.d/cron start  ( service cron start )
crontab重启: /etc/init.d/cron  restart  (service cron restart )
crontab关闭: /etc/init.d/cron  stop  ( service cron stop )

或者

1)service cron start    /*启动服务*/
2)service cron stop     /*关闭服务*/
3)service cron restart  /*重启服务*/
4)service cron reload   /*重新载入配置*/

在终端中,可以利用 ps -aux|grep cron 查询 crontab 状态,默认情况下,是自启动的。

安装 cron

如果系统没有 cron,安装

ubuntu 安装 cron
安装:apt-get install cron
启动:service cron start
重启:service cron restart
停止:service cron stop
重新载入配置  : service cron reload
检查状态:service cron status
查看crontab服务状态 : service cron status
查询cron可用的命令:service cron
检查Cronta工具是否安装:crontab -l

centOS 安装:
(1)vixie-cron 软件包是 cron 的主程序;
(2)crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

yum install vixie-cron
yum install crontabs

在CentOS系统中加入开机自动启动:
chkconfig --level 345 crond on

常见命令用法

1)crontab -u       /*设定某个用户的cron服务*/
2)crontab -l       /*列出某个用户cron服务的详细内容*/
3)crontab -r       /*删除某个用户的cron服务*/
4)crontab -e       /*编辑某个用户的cron服务*/
5)crontab -r       /*使用下面的命令移除已经计划的cron作业*/
6)crontab -ir       /*使用下面的命令移除所有已计划的cron作业,且无需再次确认。*/
crontab -l -u jp    // 列出用户 jp 的所有调度任务
* * * * *
分钟 小时 天 月 天每星期 命令
每个字段代表的含义及取值范围如下:
Minute 		: 分钟(0-59),表示每个小时的第几分钟执行该任务
Hour 		: 小时(1-23),表示每天的第几个小时执行该任务
Day 		: 日期(1-31),表示每月的第几天执行该任务
Month 		: 月份(1-12),表示每年的第几个月执行该任务
DayOfWeek 	: 星期(0-6,0代表星期天),表示每周的第几天执行该任务
Command 	: 指定要执行的命令(如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径)]
30 5 * * * ls 		/*指定每天的 5:30 执行ls命令*/
30 7 8 * * ls 		/*指定每月8号的7:30分执行ls命令*/
50 7 * * * root run-parts /etc/cron.daily 	/*每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件*/

每隔一分钟执行一次任务   	* * * * *
每五分钟执行 			   */5 * * * *

每小时的0点执行一次任务,比如6:00,10:00      0 * * * *

每天执行       0 0 * * *
每周执行       0 0 * * 0
每月执行       0 0 1 * *
每年执行       0 0 1 1 *

每分钟执行一次  									     * * * * * user command
每隔2小时执行一次      								    * */2 * * * user command (/表示频率)
每个月2号,每小时的6分和10分执行一次任务       			  6,10 * 2 * *
每天8:30分执行一次     								30 8 * * * user command
每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06       */3,*/5 * * * *
每小时的30和50分各执行一次   							  30,50 * * * * user command(,表示并列)
每个月的3号到6号的8:30执行一次  						 30 8 3-6 * * user command (-表示范围)
每个星期一的8:30执行一次  							   30 8 * * 1 user command(周的范围为0-7,0和7代表周日)

Ubuntu cron 定时执行任务

ununtu 通过调用 run-parts 命令,定时运行四个目录下的所有脚本。
1)/etc/cron.hourly,目录下的脚本会每个小时让执行一次,在每小时的2分钟时运行;
2)/etc/cron.daily,目录下的脚本会每天让执行一次,在每天0点17分时运行;
3)/etc/cron.weekly,目录下的脚本会每周让执行一次,在每周第七天的3点56分时运行;
4)/etc/cron.mouthly,目录下的脚本会每月让执行一次,在每月19号的5点32分时运行;
当然,以上的时间均是系统默认时间,可以根据自己的需求进行修改

(系统级的)做系统级配置我们会直接配置 /etc/crontab

(用户级的)一般还是建议大家使用 crontab -e ,这样系统也会帮着检查我们配置的脚本语法。

使用

第一次进入的时候要选择编辑器,选择后你可以配置新cron作业了,一般是选3

crontab -e

img

1.Ctrl+O 写入

2.出现“FIile name to Write…”,输入Enter

3.Ctrl+x 保存输出

提示“crontab:installing new crontab”表示成功。

注意 :

1、crond 守护进程是在系统启动时由 init 进程启动的,受 init 进程的监视,如果它不存在了,会被 init 进程重新启动。这个守护进程每分钟唤醒一次,并通过检查 crontab 文件判断需要做什么。

2、每个用户有一个以用户名命名的 crontab 文件,存放在 /var/spool/cron/crontabs 目录里。若管理员允许或者禁止其他用户拥有 crontab 文件,则应编辑 /etc/ 下面的 cron.denycron.allow 这两个文件来禁止或允许用户拥有自己的 crontab 文件。每一个用户都可以有自己的 crontab 文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。

例子 :

0 0 10,14,16 * *        每天上午10点,下午2点,4点触发
0 0/30 9-17 * *         朝九晚五工作时间内每半小时触发
0 0 12 ? * WED          表示每个星期三中午12点触发
0 0 12 * *        		每天中午12点触发
0 15 10 ? * *           每天上午10:15触发
0 15 10 * *             每天上午10:15触发
0 15 10 * *             每天上午10:15触发
0 * 14 * *              在每天下午2点到下午2:59期间的每1分钟触发
0 0/5 14 * *            在每天下午2点到下午2:55期间的每5分钟触发
0 0/5 14,18 * *         在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
0 0-5 14 * *            在每天下午2点到下午2:05期间的每1分钟触发
0 15 10 ? *             MON-FRI 周一至周五的上午10:15触发
0 15 10 15 * *          每月15日上午10:15触发
0 15 10 L *  *          每月最后一日的上午10:15触发
15,30,45,59 * * * * echo "xgmtest....."         表示,每隔15分钟,执行一次打印命令