linux中利用Crontab做定时任务详解
关于crontab的安装请参考:
Linux中Crontab(定时任务)安装及配置详解。
(1) cron(crond)介绍:
crond是linux下用来周期性执行某种任务或等待处理某些事件的一个守护进程,crond进程启动后,会每分钟定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。
补充:
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
(2) 配置文件:
/etc/cron.deny:
该文件中所列用户不允许使用crontab命令。
/etc/cron.allow
该文件中所列用户允许使用crontab命令。
/etc/cron.d/:
这个目录用来存放任何要执行的crontab文件或脚本。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
/etc/crontab文件就是系统任务调度的配置文件。
/etc/crontab:
这个文件负责调度各种管理和维护任务。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
所有用户定义的crontab 文件都被保存在/var/spool/cron目录中。
其文件名与用户名一致。
/var/spool/cron/:
目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名。
补充:
还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期/月执行一次。
(3)crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。
格式如下:
minute hour day month week command
其中:
minute:表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令/自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
*:代表所有可能的值。
例如:month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
,:可以用逗号隔开的值指定一个列表范围。
例如:"1,2,5,7,8,9"
-:可以用整数之间的中杠表示一个整数范围。
例如:"2-6"表示"2,3,4,5,6"
/:可以用正斜线指定时间的间隔频率。
例如:"0-23/2"表示每两小时执行一次。
(3) crontab命令详解
格式:
crontab [-u username]
参数:
-e:编辑工作表
-l:列出工作表里的命令
-r:删除工作
补充:
省略用户表表示操作当前用户的crontab。
功能:
在固定的间隔时间执行指定的系统指令/脚本。
常用周期性的日志分析或数据备份等工作。
(4)操作crontab文件
crontab -e进入当前用户的工作表编辑,是常见的vim界面。
1、新建crontab
每天的早9点到晚5点打印date到控制台
#echo the date to the console every 30minute between 9pm and 5am
0,30 09-17 * * * /bin/echo `date` > /dev/console
2、列出crontab文件
crontab -l
3、 备份
crontab -l > ~/mycron
4、 删除
5、 恢复
crontab ~/mycron
补充:
恢复的两种方式
刚刚我们备份到家目录下一个mycron文件
方式1:
将其mycron拷贝到/var/spool/cron/<username>,其中<username>是用户名。
方式2:
如果由于权限问题无法完成拷贝,可以用crontab <filename>
(4)、补充一些实用的实例
以下的youCommand代表的是你自己定义的命令。
案例1:
每1分钟执行一次
* * * * * youCommand
案例2:
每小时的第3和第15分钟执行
3,1
Linux中Crontab定时任务简单讲解
关于crontab的安装请参考:
Linux中Crontab(定时任务)安装及配置详解。
(1) cron(crond)介绍:
crond是linux下用来周期性执行某种任务或等待处理某些事件的一个守护进程,crond进程启动后,会每分钟定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。
补充:
Linux下的任务调度分为两类,系统任务调度和用户任务调度。
(2) 配置文件:
/etc/cron.deny:
该文件中所列用户不允许使用crontab命令。
/etc/cron.allow
该文件中所列用户允许使用crontab命令。
/etc/cron.d/:
这个目录用来存放任何要执行的crontab文件或脚本。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。
/etc/crontab文件就是系统任务调度的配置文件。
/etc/crontab:
这个文件负责调度各种管理和维护任务。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。
所有用户定义的crontab 文件都被保存在/var/spool/cron目录中。
其文件名与用户名一致。
/var/spool/cron/:
目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名。
补充:
还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期/月执行一次。
(3)crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段。
格式如下:
minute hour day month week command
其中:
minute:表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令/自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
*:代表所有可能的值。
例如:month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
,:可以用逗号隔开的值指定一个列表范围。
例如:"1,2,5,7,8,9"
-:可以用整数之间的中杠表示一个整数范围。
例如:"2-6"表示"2,3,4,5,6"
/:可以用正斜线指定时间的间隔频率。
例如:"0-23/2"表示每两小时执行一次。
(3) crontab命令详解
格式:
crontab [-u username]
参数:
-e:编辑工作表
-l:列出工作表里的命令
-r:删除工作
补充:
省略用户表表示操作当前用户的crontab。
功能:
在固定的间隔时间执行指定的系统指令/脚本。
常用周期性的日志分析或数据备份等工作。
(4)操作crontab文件
crontab -e进入当前用户的工作表编辑,是常见的vim界面。
1、新建crontab
每天的早9点到晚5点打印date到控制台
#echo the date to the console every 30minute between 9pm and 5am
0,30 09-17 * * * /bin/echo `date` > /dev/console
2、列出crontab文件
crontab -l
3、 备份
crontab -l > ~/mycron
4、 删除
5、 恢复
crontab ~/mycron
补充:
恢复的两种方式
刚刚我们备份到家目录下一个mycron文件
方式1:
将其mycron拷贝到/var/spool/cron/<username>,其中<username>是用户名。
方式2:
如果由于权限问题无法完成拷贝,可以用crontab <filename>
(4)、补充一些实用的实例
以下的youCommand代表的是你自己定义的命令。
案例1:
每1分钟执行一次
* * * * * youCommand
案例2:
每小时的第3和第15分钟执行
3,15 * * * * youCommand
案例3:
在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * youCommand
案例4:
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * youCommand
案例5:
每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 youCommand
案例6:
每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
案例7:
每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
案例8:
每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
案例9:
每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
案例10:
每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
案例11:
每一小时重启smb
* */1 * * * /etc/init.d/smb restart
案例12:
晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。
5 * * * * youCommand
案例3:
在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * youCommand
案例4:
每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * youCommand
案例5:
每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 youCommand
案例6:
每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
案例7:
每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
案例8:
每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
案例9:
每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
案例10:
每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
案例11:
每一小时重启smb
* */1 * * * /etc/init.d/smb restart
案例12:
晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。