综述:
Linux 系统则是由 cron (crond) 这个系统服务来控制的,Linux 系统上面原本就有非常多的计划性(周期)工作(有哪些呢?),因此这个系统服务是默认启动的。另外由于使用者自己也可以设置计划任务,所以 Linux 系统也提供了使用者控制计划任务的命令 crontab 命令。
=================分割线================================
crontab命令
作用:是用于设置、移除、显示相关为crond守护进程服务的周期性任务。
原理:Linux系统默认会安装crond守护进程, 并在开机的时候自动启动。每个用户属于自己的crontab,并且将任务保存在/var/spool/cron目录下的文件中(用户级别),任务的保存形式以相应的用户名作为文件名!
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
命令的格式:分 时 天 月 星期 用户名 命令------>七个字段!
补充: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
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文件存放的目录,以用户名命名--->注意命名的特点和权限和属性(特殊)!
引申:
[09:23:20][kiosk@foundation10:~/Desktop]$ ls -l /usr/bin/crontab
了解特殊权限:-rwsr-xr-x. 1 root root 57552 2月 23 2016 /usr/bin/crontab
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.
----------------------------------------------------------------------------------------------
cron每小时执行的原理(读取的配置文件):
/etc/cron.d/0hourly(文件)------->内容-------> /etc/cron.hourly/*(目录下的执行文件)----->其中之一(0anacron文件)