Linux的例行工作排程(crontab)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux的例行工作排程(crontab)相关的知识,希望对你有一定的参考价值。
一 什么是例行性工作排程
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这个命令
[[email protected] ~]# 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)的主要内容,如果未能解决你的问题,请参考以下文章