系统定时任务之crontab深入学习


深入学习crontab 的原理

crontab

crond 服务管理

crontab 命令式需要 crond 服务支持的, crond 服务同样是独立的服务.
一般情况下, crond 服务都是默认自启动的, 如果服务器上有循环执行的系统定时任务, 就不要关闭crond 服务 .

crond 访问控制

crond服务中,也是有白名单(/etc/cron.allow )和黑名单文件(/etc/cron.deny)的,  默认只创建了黑名单文件 .
如果同时有白名单和黑名单文件, 那么黑名单文件就会失效, 白名单文件生效(不在白名单中的用户,不能用crond 服务, 这个规则不能约束root )
其实规则和 at 一模一样.

通过命令实现定时任务

每个用户都可以实现自己的crontab 定时任务, crontab -e 之后,就会进入编辑页面, 保存退出和vim 一样.

crontadb  [选项]
选项:
    -e:             编辑crontab定时任务
    -l:             查询crontab任务
    -r:             删除当前用户所有的crontab 任务,如果有多个任务,只想删除一个, 可以用 crontab -e 
    -u username:    修改或删除其他用户的crontab任务. 仅仅只有root 可用


crontab -e 的使用细节

crontab -e  
# 进入crontab 编辑界面, 会打开vim 编辑你的工作

* * * * * 执行的任务

项目            含义                    范围
第一个"*"       一小时中第几分钟        0-59

第二个"*"       一天中第几个小时        0-23

第三个"*"       一个月中的第几天        1-31

第四个"*"       一年当中第几个月        1-12


第五个"*"       一星期中的星期几        0-7(0和7都是代表星期日)



在时间表示的时, 还有一些特殊符号需要学习

特殊符号        含义
*               代表任何时间. 比如第一个 "*" 就代表一小时中每分钟都执行一次的意思
,               代表不连续的时间. 比如  "0  8,12,16 * * * "就代表每一天的8点0分, 12点0分,16点0分都执行一次
-               代表连续的时间范围. 比如 "0 5 * * 1-6" , 代表在周一到周六的凌晨 5点0 分执行命令
*/n             代表每隔多久执行一次. 比如 "*/10 * * * * " 命令, 代表每隔十分钟就执行一次


通过配置文件来实现定时任务

因为使用crontab -e 命令定义任务时, 默认身份是当前用户, 而修改 /etc/crontab 配置文件时, 定时任务的执行者身份是可以手工指定的.
通过配置文件来实现, 有个好处, 就是使用低权限的用户来执行的时候, 如果遇到报错, 可能 就会停下来了, 危险性较小.

方法一:  根据需求编写好shell 脚本,  然后把这些 shell 脚本文件复制到  /etc/crond.{daily, weely, monthly  }  目录中的任意一个

方法二: 就是修改 /etc/contab 这个配置文件, 自己加入自己的定时任务, 不过需要注意的是指定脚本的执行者身份

/etc/contab在centos5.x 和 centos6.x 中的不同

Centos5.x中 , 是通过 run-parts脚本执行 /etc/cron.{daily, weekly, monthly } 目录中的所有文件.

centos6.x中的 /etc/crontab 文件和 centos5.x 不一样,
这几个目录, 在新版本中,依然还是会调用,  只是centos6.x中用 anacron 进行调用(anacron 的好处是如果因为意外情况,如当机或者重启等, 没有执行的定时任务,
后面系统恢复正常后会进行重新调用, 而 cron 是不会的)


对于用户来说,其实并不用在意这个定时任务是由哪个程序调用的, 我们只需要知道如何使用 crontab 设置,
方法一:  根据需求编写好shell 脚本,  然后把这些 shell 脚本文件复制到  /etc/crond.{daily, weely, monthly  }  目录中的任意一个.
方法二: 就是修改 /etc/contab 这个配置文件, 自己加入自己的定时任务, 不过需要注意的是指定脚本的执行者身份

anacron学习(了解即可)

作用: 解决了因为服务器异常而没有执行的定时任务的问题,会在系统恢复正常后找个时间进行 任务补发.
这个 anacron 服务, 是默认开机自启动的, 我们一般顶多就是改改配置文件, 但是改动的可能性较少,如果有需要,到时候百度一下即可.

crontab 的注意事项

六个选项都不能为空, 必须要写,不确定的使用"*" 代表任意时间
crontab定时任务, 最小的有效时间是分钟, 最大的时间范围是月.
在定义时间的时候, 日期和星期最好不要在一条定时任务中出现,因为它们 都是以天作为单位
在定时任务中, 不管是直接写命令, 还是在脚本中写命令, 最好的都是使用绝对路径,有时候相对路径会报错.

文章作者: 陌上人如玉
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 陌上人如玉 !
  目录