一、综述
Linux 系统则是由crond这个系统服务来控制的,Linux 系统上面原本就有非常多的计划性(周期)工作(有哪些呢?),因此这个系统服务是默认启动的,另外由于使用者自己自定义周期性的计划任务,所以 Linux 系统也提供了使用者控制计划任务的命令 crontab 命令。
后续:Linux默认的周期性任务有哪些?
=================分割线================================
二、crontab命令
作用:是用于设置、移除、显示相关为crond守护进程服务的周期性任务!
原理:Linux系统默认会安装crond守护进程, 并在开机的时候自动启动,每个用户属于自己的crontab,并且将任务保存在/var/spool/cron目录下的文件中(用户级别),任务的保存形式以相应的用户名作为文件名!
注意:如果要使用crontab的时候,必须先查看crond服务是否开启!
Linux下的任务调度分为两类(级别):系统任务调度和用户任务调度
- 系统任务调度--->默认是root有权限修改!
功能:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等!
配置文件:/etc/crontab
配置文件的内容:
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root ---> //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号-->设置为""则不发送信息
# HOME=/ ---> //使用者运行的路径,这里是根目录(可以省略)
# 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
# run-parts
命令的格式:分 时 天 月 星期 用户名 命令------>七个字段!
说明:在这个文件里并没有记录系统要执行哪些工作,而是记录了下面四个"子目录" -->man 4 crontabs查出
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
特点:这些子目录里存放了一些脚本,到了crontab所指定的时间点,系统就会去执行这些子目录里的脚本!
补充:crond读取配置文件(系统级别)的其他位置:/etc/cron.d/*;
注意:/etc/cron.d/目录的内容!特点:是crontab的配置脚本文件!
10:18:24][root@foundation10:~]# ls -l /etc/cron.d/
-rw-r--r--. 1 root root 128 Feb 23 2016 0hourly
-rw-r--r--. 1 root root 108 Sep 27 2016 raid-check
-rw-------. 1 root root 235 Jun 1 2016 sysstat
举例:0hourly的内容
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly
cron系统每小时任务(其它类同)
/etc/crontab-->/etc/cron.d/0hourly(文件)--> run-parts /etc/cron.hourly/*(目录下的执行文件)-->执行里面的脚本
/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab!
/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本!
run-parts内容:很简单的一个shell脚本,就是遍历目标文件夹,执行第一层目录下的可执行权限的文件,通常是shell脚本!
etc下的其他调度文件的目录
1. cron.daily -------->cron的服务
2. cron.hourly -------->anacron的服务
3. cron.monthly -------->anacron的服务
4. cron.weekly -------->anacron的服务
说明:关于anacron稍后补充!
计划任务的特殊格式:
(1)星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令
(2)整数间的短线(-)指定一个连续整数范围。譬如,1-4 意味着整数 1、2、3、4
(3)用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数
(4)正斜线(/)可以用来指定间隔频率。在范围后(或*后)加上 /<integer> 意味着在范围内可以跳过 integer。譬如,0-59/2(*/2) 可以用来在分钟字段定义每两分钟
(5)开头为井号(#)的行是注释,不会被处理
===============分割线====================
2.用户级别任务调度
用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab任务都被保存在/var/spool/cron目录中,其文件名与用户名一致,相应文件如下:
- /etc/cron.deny 该文件中所列用户不允许使用crontab命令--->默认存在且为空!
- /etc/cron.allow 该文件中所列用户允许使用crontab命令--->缺省不存在,但优先级高!
- /var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名--->注意命名的特点和权限和属性(特殊)!
引申:
ls -l /usr/bin/crontab
#注意特殊权限:-rwsr-xr-x
crontab的使用方法
(1)常用选项
-e:编辑该用户的cron来设置--->每个用户都只有一个文件存在,在/var/spool/cron/目录中!vi的:wq保存
-l:查看该用户的所有任务;
-r:删除该用户的"全部任务"--->如果删除一项任务的话,必须用"crontab -e"去编辑!
-u<用户名称>:指定要设定任务的用户名称;只有root用户可以指定,"帮助"其它用户删除或建立crontab的计划任务!
(2)crond用户级别的任务格式书写
注意:与系统级别格式的区别?--->由于已经是当前用户的任务计划,所以无需指定username!
补充:command也可以是脚本文件----->但必须有rx的权限,最好是全路径----->/home/username/test.sh!
(3)crontab常用的时间表示方式
* * * * * * #每分钟
*/2 * #每隔两分钟
*/2 09-17 * * * * #早9晚5每两分钟
*/2 06-12 * 1,3 * 5 #周5或者每月的1到3号的早上6点到12之间每隔2分钟
01-10 * * 1 1 * #一月一号的每小时01到10分钟执行
(4)测试
4.1)e和l的使用
4.2)e的原理
注意:会有语法校验!
4.3)任务的取消r
4.4)root帮助指定用户的定时任务
4.5)crontab执行权限
四、系统中的临时文件
临时文件的策略:系统中服务在正常运行时会产生临时文件,在系统中 /usr/lib/tmpfiles.d/ 标示服务的临时文件存放位置!
#临时策略的目录:/usr/lib/tmpfiles.d/
systemd-tmpfiles --create /usr/lib/tmpfiles.d/test.conf(执行临时文件的策略)
systemd-tmpfiles --clean /usr/lib/tmpfiles.d/test.conf(清除临时文件)
详见:man帮助文档或中文手册
五、cron定时任务执行失败的原因
六、linux定时任务crontab 实现如何每秒执行一次