linux 排程命令,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 运作的方式

7bdbca886cc54bf1c8f417ed60cefd09.png

1 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

2 配置实例:

1 配置固定时间执行固定操作(只能执行一次)

3bbbb664924daf5e1ee50ad6b530b414.png

52de6c9b4294bb947777b47c6eb85d56.png

2 配置在该时刻之后进行的操作

8f89f15ee97f21ead828e985b22f227b.png

3 查看任务情况

创建任务

f3eabbaaa6a8de9db48b2ccbcf96ab77.png

查看任务id

6ba7b851eb46310f92ad4a60cef39bb0.png

at -c 任务ID号可以查看具体执行的动作

dccfb5b1400169bdde3fc3e34e287063.png

具体的动作

11b6a238ae302d78dd1496d62099fae3.png

4 删除任务

at -d id号

6d179b95659d909bf888db35279dadbe.png

注:

如果在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的时候,才进行你所下达的工作任务。

权限黑白名单

411544975f1a5735f3351f3a2f79f7b4.png

ff3bc6daee4243c4419deb084b2111ae.png

185e713a3a536ad83771f499395e160d.png

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

将其加入白名单

f1a3a252bd85db18c3647296139f4e0d.png

d9b5cc93edc1a5837eafb9baa6e9207c.png

此时可以建立at任务

9d54e4865fbf059f570d9d5499302ffd.png

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

循环执行的例行性工作排程则是由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去编辑

2 使用命令行的方式发起任务

406a1c15c0c4db8410dab2fe0eb04146.png

de813404637675c3c0b5e12c1cf27c23.png

任务的查看

a67d211d7a45111aa956b562927691df.png

任务的结果

1cec7fb5e986c552bad0e6e82bd30b07.png

3 任务格式

7 15 * touch /mnt/aaa

分钟 小时 天 月 周 执行的操作

41131de9e4ec0c5cf2868d120c8e38af.png

辅助字符

c610b0d01b4aba9261c145a615100793.png

删除任务

9c849a8b7afc2b2fb615a36b3a18dff0.png

68557c589c3c69d175dd85d350ca1714.png

22302cce73d866f2b15b3f6ab7c7cb8e.png

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

进行任务的查看

f42b2122a77de7838264546e76fc552c.png

ecd00c2a32710b530d73d06cbd60d8ad.png

其默认的存放目录是/var/spool/cron/表示用户名称

869a7e588e0effc0800f7e19eefc66ae.png

4 系统的配置文件:/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/

08c777e7300e7d3fd63efdeee1693d57.png

fd20f9c78385e06a23a6f9fa3457c7ff.png

四 总结:

文件方式定义crontab

vim /var/spool/cron/用户名称 #以某个用户身份执行cron,文件民称必须和用户名称一致

分 时 天 月 周 动作

vim /etc/cron.d/文件 #设定多个用户身份执行cron

系统中的cron任务

/etc/cron.daily/ ##系统每天做执行的程序

/etc/cron.hourly/ ##系统每小时执行的程序

/etc/cron.monthly/ ##系统每月执行的程序

/etc/cron.weekly/ ##系统每星期执行的程序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值