Board logo

标题: 使用 cron 进行自动维护(2) [打印本页]

作者: look_w    时间: 2018-5-23 17:54     标题: 使用 cron 进行自动维护(2)

定制时间表cron 时间表允许以多种方式运行作业,比如每分钟或在特定日期的特定时间。调度的参数非常灵活。               
cron 字段可以通过五个字段调整频率:分、小时、月中日、月份和周中的日期(如周一,周二)。 总结如何调整每个字段。                       
表 1. cron 作业的调度选项位置字段值说明1分0-59
2小时0-23
3月中日1-31与分和小时不同,月中日不是从零开始的。4月份1-12月份也不是从零开始的。也可以不使用 1-12 的数字,而是使用月份名的前三个字母,比如 jan 或 may。                                5周中日0-707 都代表星期日。还可以使用名称的前三个字母,比如 mon 或 wed。                               
除了名称或数字之外,还可以使用星号(*)表示 “所有”。例如,在分钟位置上的星号表示这一天中的每一分钟。(在某些情况下确实需要如此高的频率,但是一定要小心,以这种频率执行的任务应该非常简单,不会长时间运行)。
还可以使用值的列表、范围和步长(增量)分别指定多个值、连续的值范围和不连续的值范围。甚至可以组合使用列表和范围。列表 是一个逗号分隔的值集。范围 由启始值和结束值(含)以及可选的步长值构成。                       
我们来看一些示例。 中的每一行包含一个时间表及其说明。当分、小时和日期字段与当前时间匹配时,cron 会执行命令;如果月中日和周中日受到限制(也就是说,不是 *),那么当这两个字段中至少一个 与当前时间匹配时,cron 也会执行命令。                       
表 2. cron 作业的时间表示例调度计划
分小时月中日月份周中日期说明01151,3,5,7,9,11*在 1、3、5、7、9 和 11 月的 15 日的 1 a.m. 运行命令。为了更容易理解,也可以把这个时间表写成  0 1 15 jan,mar,may,jul,sep,nov *。在指定列表时,不要在逗号后面加空格。                                0-59/15****这个调度计划每 15 分钟运行命令一次。        30***wed,fri这个时间表只在星期三和星期五每小时的 30 分时执行命令一次。(在列表中可以使用日和月份的名称,但是在范围中不可以)。         0,300-5,17-23***在午夜到 5 a.m. 以及 7 p.m. 到 11 p.m. 之间整点时和 30 分时运行命令。                                0011*在每年 1 月 1 日午夜执行命令一次。00**0在每个星期日午夜运行命令。这相当于每周一次。                                30010,20,30*6因为月中日和周中日受到限制,这个时间表在每星期六和每月的 10、20 和 30 日(二月除外)的 12:30 a.m. 运行命令。                                如您所见,实际上可以使用这五个参数指定任何调度计划。为了更加简便,Vixie cron 还提供了常用调度计划的简写形式。表 3 列出一些简写形式。                       
表 3. 常用调度计划的简写形式简写形式说明@reboot每当计算机重新引导时运行命令。@daily每天一次的简写形式。@weekly每周一次的简写形式。@annually每年一次的简写形式。也可以写成 @yearly。                                @midnight在每天午夜运行命令。这个简写形式相当于 @daily。                               
如果喜欢使用简写形式,只需用它们替代 cron 命令的前五个字段。下面这个命令看起来简单多了。                       
1
@daily root /usr/local/scripts/clean_old_files.sh




crontab 命令示例掌握了基本概念之后,我们来看一些用户 crontab 命令示例。同样的命令也可以应用系统范围:只需在所有系统 crontab 项中周中日字段(第五个字段)后面指定一个用户名。                       
创建个人 crontab要想创建个人 crontab,可以用任何文本编辑器创建一个文件。按照惯例,个人 crontab 文件保存在 ~/.crontab 中,但是可以使用任何文件名。                               
1
2
3
4
5
6
7
8
9
PATH=/usr/bin:/bin:/usr/local/bin

#
# Every day, print and delete all temporary files whose names begin with '.#'
@daily      find $HOME -type f -name '.#*' -print -delete
     
#
# Every week, show me what is consuming space in my home directory
@weekly     du -sh $HOME




通过 crontab 实用程序提交个人 crontab在编辑文件(比如 ~/mycrontab)之后,通过 crontab 实用程序把它提交给 cron:                               
1
% crontab ~/mycrontab




查看 cron 中存储的信息要想查看 cron 中存储的信息,可以输入 crontab -l:                               
1
2
3
4
5
6
7
8
9
10
% crontab -l
PATH=/usr/bin:/bin:/usr/local/bin
     
#
# Every day, print and delete all temporary files whose names begin with '.#'
@daily      find $HOME -type f -name '.#*' -print -delete

#
# Every week, show me what is consuming space in my home directory
@weekly     du -sh $HOME




替换 crontab在任何时候,都可以使用 crontab 实用程序替换您的 crontab。只需提交一个新文件或同一文件的修订版。要想删除 crontab 作业,只需输入 crontab -r:                               
1
2
3
4
5
6
7
8
9
10
% whoami
joe
% crontab ~/mycrontab
% crontab -l
PATH=/usr/bin:/bin:/usr/local/bin
...

% crontab -r
% crontab -l
crontab: no crontab for joe






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0