一、介绍
1、crond是什么
crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。
特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。
2、 为什么要使用crond定时任务
linux系统的定时任务crond,相当于我们平时生活中的闹钟的功能。可以满足周期性执行任务的需求。
3、不同系统的定时任务和种类
A、windows 10 系统的定时任务
在桌面上点击“此电脑”右键→管理,在计算机管理(本地)中选择系统工具→任务计划程序。
B、linux系统的定时任务
linux系统中定时任务调度的工作可以分为以下两个情况:
① linux系统自身定期执行的任务工作:系统周期性执行的任务工作,如轮询系统日志,备份系统数据,清理系统缓存等,这些任务无需我们认为干预。例如:

[root@centos ~]# ls -l /var/log/messages*
#系统的日志
[root@centos ~]# ls -l /var/log/secure*
#系统安全日志
[root@centos ~]# ll /etc/|grep cron
#系统管理的定时文件
[root@centos ~]# cat /etc/logrotate.d/syslog
#日志文件管理工具,指针对/var/log/messages有效
[root@centos ~]# cat /etc/logrotate.conf
#日志文件管理工具设置文件

② 用户执行的任务工作:某个用户或系统管理员定期要做的任务工作,例如每隔5分钟和互联网上时间服务器进行时间同步,每天晚上0点备份站点数据及数据库数据,一般这些工作需要由每个用户自行设置才行。
例如:服务器时间同步
a)查看时间同步

[root@centos ~]# crontab -l
#time sync by zhangyujia at 2018-2-10
*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2>&1
#每五分钟同步一次时间

b)编辑时间同步

[root@centos ~]# crontab -e

4、Linux系统下定时任务软件的种类
①at:适合执行一次就结束的调度任务;依赖的服务:atd。

[root@centos ~]# chkconfig --list atd
#因为都是用crontab,所以都装机完成后关掉
atd             0:off   1:off   2:off   3:off   4:off   5:off   6:off

②anacron:适合于非724小时的开机的服务器准备的。开机执行的,检测停机期间没有执行的任务,在开机后一次性执行一遍。(因为工作中大多数的服务器都是724小时开机,所以这个定时任务的作用意义不大)
③crond:每分钟(默认情况下)会检查系统中是否有需要执行的定时任务,如果有就会根据事先定义好的规则来执行这个定时任务;依赖的服务:crond(需要设置开机自启动)。
提示:我们说的crond是一个定时任务的守护进程,而crontab是一个命令,是用户用来设置定时任务规则的命令。几乎每个服务器都会用到crond服务。


二、使用说明
1、指令说明
通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位是分钟,小时,日,月,周及以上的任意组合(注意:日和周不要组合)
2、使用者权限及定时任务文件

3、指令选项说明

[root@centos ~]# crontab -help
crontab: invalid option -- 'h'
crontab: usage error: unrecognized option
usage:  crontab [-u user] file
        #指定使用的用户执行任务
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        #编辑定时任务(vi /var/spool/cron/)
        -l      (list user's crontab)
        #显示列表(cat /var/spool/cron/)
        -r      (delete user's crontab)
        #删除(用的比较少)
        -i      (prompt before deleting user's crontab)
        #出现确认信息
        -s      (selinux context)

注意:
①crontab{-l |-e}实际上就是在操作/var/spool/cron/当前用户这样的文件。
②crontab -e→/var/spool/cron/root→前者会检查语法,而后者不会。
③visudo→/etc/sudoers→前者会检查语法,而后者不会。
4、指令的使用格式
默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录的用户名一致。如:root用户的定时任务配置文件为/var/spool/cron/root。
crontab用户的定时任务一般分为6段(空格分隔,系统的定时任务则/etc/crontab分为7段),其中前五段位时间设定段,第六段为所要执行的命令或脚本任务段。

[root@centos ~]# cat /etc/crontab
……(省略上边内容)
# 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基本格式

* * * * * cmd

提示:
a、cmd为要执行的命令或脚本,例如/bin/sh /server/scripts/zhangyujia.sh.
b、每个段之间必须要有空格。
②crontab语法格式中时间段的含义
第一段 代表分钟 00-59
第二段 代表小时 00-23
第三段 代表日期 01-31
第四段 代表月份 01-12
第五段 代表星期 0-7(0和7都代表星期日)

③crontab语法格式中特殊符号的含义表

5、crondtab编辑定时任务依赖的服务
①要保持开机自启动才能运行定时任务
[root@centos ~]# chkconfig –list crond #检查开机自启动
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
②要保证定时服务在系统中运行才能使用 #检查是否在运行
[root@centos ~]# ps -ef|grep crond|grep -v grep
root 1675 1 0 11:19 ? 00:00:00 crond
三、例子

①30 3,12 * * * /bin/sh /scripts/zhangyujia.sh
#每天凌晨3点半和中午12点半的时刻执行/scripts/zhangyujia.sh脚本
②30 */6 * * * /bin/sh /scripts/zhangyujia.sh
#每6小时30分执行一次/scripts/zhangyujia.sh脚本
③30 8-18/2 * * * /bin/sh /scripts/zhangyujia.sh
#在每天的8点到18点之间,每隔2小时的半点时刻执行/scripts/zhangyujia.sh
④30 21 * * * /application/apache/bin/apachectl graceful
#每天晚上9点半重启apache
⑤ 45 4 1,10,22 * * /application/apache/bin/apachectl graceful
#每月1日10日22日的4点45分重启apache
⑥ 10 1 * * 6,0 /application/apache/bin/apachectl graceful
#每周六和周日的凌晨1点10分重启apache
⑦ 0,30 18-23 * * * /application/apache/bin/apachectl graceful
#每天的18点到23点每隔30分钟重启一次apache。(最后一次执行任务时23:30分)
⑧ 0 */1 * * * /application/apache/bin/apachectl graceful
#每小时重启一次apache
⑨ * 23,00-07/1 * * * /application/apache/bin/apachectl graceful
#每天的23点与0-7点之间每分钟重启一次apache
⑩ 00 11 * 4 1-3 /application/apache/bin/apachectl graceful
#每年的4月份每周的周1到周3每天的11点整重启一次apache

注意:一般周和日尽量不要同时用,否则可能达不到想要的效果


欢迎关注
新浪微博:https://weibo.com/yougazhang0506
微信公众平台:张雨嘉

我的网站:https://zhangyujia.cn
51CTO博客:http://blog.51cto.com/11099293
CSDN博客:http://blog.csdn.net/u013260195
GitHub:https://github.com/zhangyujia0506/

本站文章都归www.zhangyujia.cn和www.laozhangteam.com所有,若转载请注明出处。
嘉叔的博客 » 01-定时任务crond

提供最优质的文章集合

立即查看 了解详情