例行工作排程 crontab

例行工作,有点类似上班打卡,等等循环的工作

LINUX 工作排程的种类, at , cron

一种是例行性的,就是每隔一定的周期要来办的事项   crontab

一种是突发性的,就是这次做完以后就没有的那一种   at  ( 要想运行,必须启动 atd 服务, 启动办法 /etc/init.d/atd restart ( chkconfig atd on 设置每次开机自动启动 )

at

我们使用 at 这个指令来产生所要运作的工作,并将这个工作以文本文件的方式写入 /var/spool/at 目录内,该工作便能等待 atd 这个服务取用与执行了

/etc/at.allow 与 /etc/at.deny 这两个档案来限制用户是否可以使用 at ( 如果这两个档案都不存在,那么只有 root 可以使用 at 这个指令,先检查at.allow,再检查at.deny

at [-mldv] TIME   at -c 工作号码

-m : 当at 完成之后,及时没有输出信息,以 email通知使用者该工作已完成 ( 如果没有信息输出,就不发送邮件,如果没有指定 -m 参数 )

-l : at -l 相当于 atq , 列出目前系统的所有 at 排程

-d : at -d 相当于 atrm , 可以取消一个 at 排程的工作

-v : 可以使用比较明显的事件格式栏出  at 排程中的任务栏表

-c : 可以列出后面接的该项工作的实际指令内容

时间格式: HH:MM  (或 HH:MM YYYY-MM-DD )   例如: 04:00 2009-03-17 或 now + 5 minutes  或 04pm + 3 days

at now + 5 minutes 进入 at >         // 这种 now + 时间的方式比较好

at > /bin/mail root-s "testing a job" < /root/.bashrc

at > <EOF> 这里输入 ctrl + d 就会出现 EOF 的字样

at -c 4

at 另一个很棒的优点是,背景执行

脱机继续工作的任务,比如大型的程序,需要运行很久,比如跑3天,如果是用windows连接的linux,如果连接中断,那么这个程序也会中断,因为它所依赖的shell被中断了,

而如果有了 at, 就可以让这个程序在背景下工作,而不依赖于终端机

at 执行与所有的终端机环境无关,而所有 standard output/standard error output 都会传送到执行者的 mailbox 去啦,所以终端机当然看不到任何信息,可以通过 echo "hello" > /dev/tty1来取代,这样就能显示在屏幕上了

atq ( 查看所有的 at )

atrm 5 ( 5 是 job no. ) ( 移除工作5 )

crontab

/etc/cron.allow 和 /etc/cron.deny ( 一般只用一个就可以了,例如 /etc/cron.deny, 有at中的文件一样,如果没有,就只有root能执行 )

该工作会被记录到 /var/spool/cron/用户 中      在工作没有被执行,准备的时候

cron 执行的每项工作都会记录到 /var/log/cron 这个登录档中,因为它是循环执行的,所以会有历史记录

如果你使用 crontab -e 直接编辑工作可以, 但是如果有多个工作时,每个工作要占一行,另外如果多个工作时,你如果想删除其中的一个, 那么只能使用

crontab -e 编辑, 把那行删除, 如果是想把所有的工作全部删除,那么使用 crontab -r

crontab [-u username] [-l | -e | -r]

-u : 只有 root 可以,帮助其他使用者 建立/删除 crontab 工作

-e : 编辑 crontab

-l : 查看 crontab

-r : 删除 crontab 工作内容

因为是循环指令,所以需要有时间戳,

指令格式如下

分钟     小时     日期     月份     周        指令

0-59     0-23    1-31     1-12    0-7       指令   ( 周的 0 和 7 都是星期天 )

* 星号 : 代表任何时刻都接受的意思。 比如日,月,周都是* , 那就有可能代表,不论何月,何日,的礼拜几 该时间都执行

, 逗号 :代表时间断点, 0 3,6 表示 3点 和 6点 只是这两个时间点

-减号 :代表时间间隔, 0 3-6 代表 3,4,5,6,都执行

/n 斜线:每个的意思,/5 表示每隔5分钟

* /5 * * * * 就是每隔5分钟1次

系统配置文件 /etc/crontab

只需要编辑 /etc/crontab 这个档案,就可以做例行事例,有一点需要特别注意, crontab -e 这个就是编辑 /usr/bin/crontab 。系统每分钟都会读取一次 /etc/crontab 与 /var/spool/cron 里边的数据内容。因此你编辑完 /etc/crontab之后,保存后,一会就会立刻执行了。

周与日期的时间戳不能共存

 以上工作例程的作用是,比如当你使用windows远程连接到linux时,此时调用bash,而当你中断这个连接时,同样,这个bash也就被销毁了。所以如果你有什么大的程序需要运行很长时间时,那么,有可能出现网络中断而你的程序还没有运行完,所以。。。如果是使用这种例程来运行,那么默认就会交给系统自己运行,即便你退出了登录也没有关系。

 可以唤醒停机时间的工作任务

比如你的 linux在晚上要关机,而晚上23点多还有例程工作要做。因为时间错过了。那不是没办法工作了? 引入 anacron 命令

anacron 以天为单位或者是在开机后立刻运行 anacron 动作,执行完后就会自动停止了。

anacron 会以 一天,七天, 一个月为期去侦测系统未进行的 crontab 任务。

 anacron [-sfn] [job]

anacron -u [job]

-s : 强制执行,不判断时间记录文件的时间戳 ( 用来判断关机时间 )

-n : 立刻进行未执行的任务

-u : 仅更新时间记录文件的时间戳,不进行任何工作

job : 由 /etc/anacrontab 定义的各项工作内容

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值