shell_72.Linux调度需要定期运行的脚本

调度需要定期运行的脚本
1. cron 时间表
cron 时间表通过一种特别的格式指定作业何时运行,其格式如下:

minutepasthour hourofday dayofmonth month dayofweek command 

cron 时间表允许使用特定值、取值范围(比如 1~5)或者通配符(星号)来指定各个字段。
如果想在每天的 10:15 运行一个命令,可以使用如下 cron 时间表字段:

15 10 * * * command

dayofmonth、month 以及 dayofweek 字段中的通配符表明,cron 会在每天 10:15 执行该命令。
要指定一条在每周一的下午 4:15(4:15 p.m.)执行的命令,可以使用军事时间(1:00 p.m.是 13:00,2:00 p.m.是 14:00,3:00 p.m.是 15:00,以此类推)
如下所示:

15 16 * * 1 command

可以使用三字符的文本值(mon、tue、wed、thu、fri、sat、sun)或数值(0 或 7 代表周日,6 代表周六)来指定 dayofweek 字段。
这里还有另外一个例子。要想在每月第一天的中午 12 点执行命令,可以使用下列字段:

00 12 1 * * command

命令列表必须指定要运行的命令或脚本的完整路径。你可以像在命令行中那样,添加所需的任何选项和重定向符:

15 10 * * * /home/christine/backup.sh > backup.out


cron 程序会以提交作业的用户身份运行该脚本,因此你必须有访问该脚本(或命令)以及输出文件的合理权限。


2. 构建 cron 时间表
每个用户(包括 root 用户)都可以使用自己的 cron 时间表运行已安排好的任务。Linux 提供了 crontab 命令来处理 cron 时间表。
要列出已有的 cron 时间表,可以用-l 选项:

$ crontab -l
no crontab for christine
$


在默认情况下,用户的 cron 时间表文件并不存在。可以使用-e 选项向 cron 时间表添加字段。
在添加字段时,crontab 命令会启动一个文本编辑器(参见第 10 章),使用已有的 cron 时间表
作为文件内容(如果时间表不存在,就是一个空文件)。


3. 浏览 cron 目录
如果创建的脚本对于执行时间的精确性要求不高,则用预配置的 cron 脚本目录会更方便。
预配置的基础目录共有 4 个:hourly、daily、monthly 和 weekly。

$ ls /etc/cron.*ly
/etc/cron.daily:
0anacron apt-compat cracklib-runtime logrotate [...]
apport bsdmainutils dpkg man-db [...]
/etc/cron.hourly:
/etc/cron.monthly:
0anacron
/etc/cron.weekly: 
0anacron man-db update-notifier-common 
$


4. anacron 程序
如果 anacron 判断出某个作业错过了设置的运行时间,它会尽快运行该作业。
这意味着如果Linux 系统关闭了几天,等到再次启动时,原计划在关机期间运行的作业会自动运行。
有了anacron,就能确保作业一定能运行,这正是通常使用 anacron 代替 cron 调度作业的原因

anacron 程序只处理位于 cron 目录的程序,比如/etc/cron.monthly。它通过时间戳来判断作业是否在正确的计划间隔内运行了。
每个 cron 目录都有一个时间戳文件,该文件位于/var/spool/anacron:

$ ls /var/spool/anacron 
cron.daily cron.monthly cron.weekly 
$ 
$ sudo cat /var/spool/anacron/cron.daily 
[sudo] password for christine: 
20200619 
$ 

anacron 程序使用自己的时间表(通常位于/etc/anacrontab)来检查作业目录:

$ cat /etc/anacrontab 
# /etc/anacrontab: configuration file for anacron 
# See anacron(8) and anacrontab(5) for details. 
SHELL=/bin/sh 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
HOME=/root 
LOGNAME=root 
# These replace cron's entries 
1 5 cron.daily run-parts --report /etc/cron.daily 
7 10 cron.weekly run-parts --report /etc/cron.weekly 
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly 
$ 


anacron 时间表的基本格式和 cron 时间表略有不同:

period delay identifier command 


period 字段定义了作业的运行频率(以天为单位)。anacron 程序用该字段检查作业的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微辣已是极限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值