码迷,mamicode.com
首页 > 系统相关 > 详细

Linux的例行工作排程(crontab)

时间:2018-01-24 22:26:11      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:type   文件名   ges   monthly   操作   行编辑   工作内容   查看   page   

一 什么是例行性工作排程
1 Linux工作排程的种类:at,cron
两种工作排程的方式:
例行性:每隔一定的周期要来办的事项
突发性:只做一次就不做的
at:at是可以处理执行一次就结束排程的指令,不过要执行at时,必须要有atd这个服务的支援才行,在Redhat和centos中这个服务是预设启动的。
crontab:crontab这个指令所设定的工作将会循环一直进行下去,可循环的时间为分钟、小时、每周、每月或每年。crontab除了可以使用指令执行外,亦可编辑/etc/crontab来支持,至于让crontab可以生效的服务则是crond这个服务

2 centos Linux 系统上常见的例行性工作
1 进行登录档的轮替(log rotate)
Linux会主动的将系统所发生的的各种信息都记录下来,就是登录档,这样会导致登录档文件越来越大,此时适合将登录文件数据进行迁移,将旧数据与新数据分离,这就是log rotate的任务。
2 登录文件分析 logwatch 的任务:
如果系统发生了软件问题、硬件错误、资安问题等,绝大部分的错误信息都会被记录到登录文件中,因此管理员的重要任务之一就是分析登录档, centos 提供了一只程序(logwatch)来主动分析登录信息,所以会受到logwatch的信件
3 建立locate 的数据库
locate指令是透过已经存在的文件名数据库来进行系统上文件名的查询,我们的文件名数据库是放置在/var/lib/mlocate/中,这个数据库的自动更新就是系统的例行工作所产生的效果
4 man page 查询数据库的建立
5 RPM 软件登录文件的建立
6 移除暂存档
7 与网络服务有关的分析行为
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二 仅执行一次的工作排程
1 atd 的启动与at 运作的方式
技术分享图片

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

我们可以使用/etc/at.allow与/etc/at.deny这两个文件来进行at的限制
1 先寻找/etc/at.allow这个文件,写在这个文件中的使用者才能使用at,没有在这个文件的使用者则不能使用at(及即使没有写在at.deny当中)
2 如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若写在这个at.deny的使用者则不能使用at,而没有在这个at.deny文件中的使用者,就可以使用at这个命令了
3 如果两个文件都不存在,那么只有root可以使用at这个指令了

2 实际运作单一工作排程
语法:
at -c 工作号码
选项与参数:
-m :当at 的工作完成后,即使没有输出讯息,亦可email通知使用者该工作已完成
-l :at -l 相当于atq,列出目前系统上面所有该用户的at排程
-d :at -d 相当于atrm,可以取消一个在at排程中的工作
-v :可以使用较明显的时间格式拦出at排程中的任务栏表
-c :可以列出后面接的该项工作的实际指令内容

TIME:时间格式,这里可以定义出[什么时候要进行at 这项工作]的时间HH:MM
cx>04:00
在今时今日执行,若该时刻已经超时,则明天HH:MM进行此工作
HH:MM YYYY-MM-DD
cx>04:00 2017-12-22
强制规定在某月某一天的特殊时间执行该工作
HH:MM[amlpm][Month][Date]
cx>04pm july 30

HH:MM[am|pm]+number [minutcs|hours|days|weeks]
cx > now + 5minutes cx>04pm + 3 days

配置实例:
1 配置固定时间执行固定操作(只能执行一次)
技术分享图片
技术分享图片

2 配置在该时刻之后进行的操作
技术分享图片

3 查看任务情况
创建任务
技术分享图片
查看任务id
技术分享图片
at -c 任务ID号可以查看具体执行的动作
技术分享图片
具体的动作
技术分享图片

4 删除任务
at -d id号
技术分享图片

注:
如果在at now+1min
echo "hello"
则不会显示
因为at的执行与终端环境无关,而所有standard output/standard error ouput 都会传送到执行者的mailbox
,所以终端机上不会有任何显示

at 还有一个背景执行的功能
脱机继续工作的任务
由于at 工作排程的使用上,系统会将该项at 工作独立出你的bash环境中,直接交给系统的atd程序来接管,因此,当你下达了at的工作之后就可以立刻脱机了,剩下的工作就可以交给Linux管理了

batch:系统有空时才执行背景任务
其实batch时利用at来进行指令的下达,只是加入一些控制参数而已,batch神奇的地方是:他会在CPU的工作负载小于0.8的时候,才进行你所下达的工作任务。

权限黑白名单

技术分享图片
技术分享图片
技术分享图片

此时的admin用户不具有权限执行at命令

将其加入白名单
技术分享图片
技术分享图片
此时可以建立at任务
技术分享图片

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三 循环执行的例行性工作排程

循环执行的例行性工作排程则是由cron(crond)这个系统服务来控制的

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

优先级允许比拒绝高,建议一般保留拒绝,允许的可以不写

当用户使用crontab这个指令来建立工作排程之后,该项工作就会被记录到/var/spool/cron里面去,而且是以账号来作为判别的。

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

-u 只有root才能进行这个任务,亦及帮其他使用者建立/移除crontab 工作排程

-e :编辑crontab 的工作内容
-l :查阅crontab的工作内容
-r :移除所有的crontab的工作内容,若紧要移除一项,用-c去编辑

使用命令行的方式发起任务
技术分享图片
技术分享图片
任务的查看
技术分享图片
任务的结果
技术分享图片

任务格式
7 15 * touch /mnt/aaa
分钟 小时 天 月 周 执行的操作

技术分享图片

辅助字符

技术分享图片

删除任务
技术分享图片
技术分享图片
技术分享图片

若要删除单个任务,则需要使用-e进行编辑删除

进行任务的查看
技术分享图片
技术分享图片
其默认的存放目录是/var/spool/cron/ 表示用户名称
技术分享图片

2系统的配置文件:/etc/crontab,/etc/cron.d/
crontab -e 是针对cron来设计的,如果是[系统的例行性任务]时,只需要编辑/etc/crontab 这个文件就可以,crontab其实是/usr/lib/crontab这个执行档,但是/etc/crontab是一个纯文本文档,可以使用root的身份其编辑

cron 这个服务的最低侦测限制是[分钟],所以[cron 会每分钟去读取一次/etc/crontab与/var/spool/cron 里面的数据内容],因此只需要编辑完成并存储就可以了

有时候其他的Unix系统中,由于crontab是读到内存中的,所以在你修改完/etc/crontab之后,可能不会马上执行,这时候请重启crond这个命令

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash 使用哪种shell接口
PATH=/sbin:/bin:/usr/sbin:/usr/bin 执行文件搜寻路径
MAILTO=root 若有额外STDOUT,以cmail 将数据送给谁
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

MAILTO=root;
这个项目是说,当/etc/crontab这个文件中的例行性工作的指令发生错误时,或者是该工作执行结果有STDOUT/STDERR时,会将错误讯息或者是屏幕显示的通讯传给谁,默认是系统直接寄发一个mail 给root,可以改成自己的e-mail

PATH=...;
搜寻文档的路径

[ 分 时 日 月 周 身份 指令] 七个字段的设定

/etc/crontab 中必须有身份指定

crond 服务读取配置文件的位置
/etc/crontab
/etc/cron.d/
/var/spool/cron/

技术分享图片

技术分享图片

总结:
文件方式定义crontab
vim /var/spool/cron/用户名称 #以某个用户身份执行cron,文件民称必须和用户名称一致
分 时 天 月 周 动作
vim /etc/cron.d/文件 #设定多个用户身份执行cron
<分> <时> <天> <月> <周> <用户> <动作>
系统中的cron任务
/etc/cron.daily/ ##系统每天做执行的程序
/etc/cron.hourly/ ##系统每小时执行的程序
/etc/cron.monthly/ ##系统每月执行的程序
/etc/cron.weekly/ ##系统每星期执行的程序

Linux的例行工作排程(crontab)

标签:type   文件名   ges   monthly   操作   行编辑   工作内容   查看   page   

原文地址:http://blog.51cto.com/11233559/2064796

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!