例行性工作

什么是例行性工作

有的工作是例行性的(如上下班打卡),

有的工作则是临时发生的(如商品大降价)。


Linux工作调度的种类: at cron

两种工作调度的方式:

  • 一种是例行性的,就是每隔一定的周期要来办的事项;
  • 一种是突发性的,就是这次做完以后就没有的那一种(如计算机大降价);
  • at : at 是个可以处理仅执行一次就结束的工作。
  • crontab: crontab这个命令所设置的工作将会循环一直进行下去。

突发性的工作调度(at)

要使用单一工作调度,linux系统上面由atd来负责这个调度的服务,首先启动/etc/init.d./atd restart
可以设置一下开机时就启动这个服务,免得每次重新启动都得再来一次。 chkconfig atd on

at 安全管理
/etc/at.deny 将不可以使用at的账号写入其中,若未记录到这个文件当中的用户,就可以使用at.

at 的参数使用

at [-m -v -c -l -d ] TIME
-m 当at的工作完成后,即使没有输出信息,以emial 通知用户该工作已完成
-l 相当于atq,列出所有用户的at任务
-d 相当于atrm, 去掉at的任务
-v 可以使用较明显的时间格式列出at调度中的工作
-c 列出后面接的该工作的实际命令内容

TIME: 时间格式,这里可以定义什么时候进行at这项工作时间, 格式有:
HH:MM     ex>04:00
HH:MM YYYY-MM-DD  ex>04:00 2012-04-01
HH:MM[am|pm]  [Month]  [Date]   ex>04:00 March 17
HH:MM[am|pm]  +number [minutes|hours|days|weeks]
ex>now +5 minutes  就是说,在现在在加5minutes后进行该工作调度

编写例行性工作时应注意:使用命令时,尽量用绝对路径,使用Ctrl+d 结束编写。


循环执行的例行性工作调度

相对于at是仅执行一次的工作,循环执行的例行性工作调度则是由cron(crond)这个系统服务来控制的。

用户设置

用户想要新建循环型工作调度时,使用的是crontab这个命令。不过,为了安全性的问题,与at类似,我们可以限制使用crontab的用户账号。使用的限制数据有:

  • /etc/cron.allow
    • 将可以使用crontab的账号写入其中,若不在这个文件内的用户则不可使用crontab.
  • /etc/cron.deny
    • 将不可以使用crontab的账号写入其中,若未记录到这个文件当中的用户,就可以使用crontab.

如果两个文件同时存在,那么/etc/cron.allow 优先,
如果两个文件都不存在,那么只有root用户可以安排作业。

crontab [-u username] [-l|-e|-r]
-u:只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
-e: 编辑 crontab的工作内容
-l: 查阅 crontab 的工作内容
-r:删除所有的 crontab 的工作内容, 若仅要删除一项,请用-e去编辑。

查询用户目前的crontab内容: crontab -l

如果,若仅想要删除一项工作而已的话,必须要用 crontab -e 去编辑 如果想要全部的工作都删除,才使用 crontab -r


系统的配置文件: /etc/crontab

基本上,cron这个服务的最低检测限制是"分钟",所以cron会每分钟去读取一次 /etc/crontab与 /var/spool/cron里面的数据内容,因此, 只要你 编辑完 /etc/crontab这个文件,并且将它保存起来之后,那么cron的设置就自动会来执行了!

在linux下面的crontab 会自动帮我们每分钟重新读取一次/etc/crontab 的例行工作事项,但是出于某些原因或者是其他的unix系统中,由于crontab 是读到内存中的,所以在你修改完/etc/crontab之后,可能并不会马上执行,这时候请重新启动crond这个服务 "/etc/init.d/crond restart"

[root[@localhost](https://my.oschina.net/u/570656) lvhuizhen]# vi /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

| 代表意义 | 分钟 | 小时 | 周期 | 月份 | 周 | 命令| | :------------- | :------------- | | 数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 命令|

比较有趣的是按个周,周的数字为0或7时,都代表星期天,另外, 还有一些辅助的字符,如下:

特殊字符代表意义
*(星号)代表任何时刻都接受的意思!
,(逗号)代表分隔时段的意思。举例来说,如果下达的工作是 3:00 与 6:00时,就会是: 0 3,6 * * * command 时间参数还是有五栏,不过第二栏是3,6,代表3与6都适用!
-(减号)代表一段时间范围内,举例来说, 8点到12点之间的每小时的20分都进行一项工作: 20 8-12 * * * command 仔细看第二栏变成8-12,代表8,9,10,11,12都适用的意思!
/n(斜线)那个n代表数字,每隔n单位时间的意思,例如每五分钟进行一次,则: */5 * * * * command 很简单吧,用*与/5搭配, 也可以写成 0-59/5, 意思相同

一些注意事项

有的时候,我们系统的cron来进行例行性工作时,需要一些使用方面的特性。举例来说:如果我们有四五个工作都是五分钟要进行一次的, 那么是否这四个操作都在同一个时间点进行?如果同时进行,该四个操作又很耗费系统资源,如此一来,每五分钟不是会让系统忙的要死! 此时要好好的分配一些运行时间就OK啦,所以,注意一下: * 资源分配不均的问题 * 取消不要的输出选项 * 安全的检验 * 周与日,月不可同时并存

转载于:https://my.oschina.net/lvhuizhenblog/blog/812125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值