鸟哥的Linux私房菜读书笔记--循环执行的例行性工作排程

版权声明:本文属博主原创,转载请联系QQ528055624 https://blog.csdn.net/qq_41825534/article/details/83096868

循环执行的例行性工作排程是由cron(crond)系统服务来进行控制的,默认启动

1、使用者的设定

使用者建立循环型工作排程使用的是cronta指令,为了安全性的问题,与at同样的,我们可以限制使用crontab的使用者账号,使用的限制数据有:

(1)/etc/cron.allow

将可以使用crontab的账号写入其中,若不在这个文件内的使用者则不可使用crontab

(2)/etc/cron.deny

将不可以使用crontab的账号写入其中,若未记录到该文件中的使用者,就可以使用crontab

当用户使用crontab指令来建立工作排程后,该项公作就会被记录到/var/spool/cron中,而且是以账号作为判别

[root@study ~]# crontab [-u username] [-l|-e|-r]
选项与参数:
-u :只有 root 才能进行这个任务,亦即帮其他使用者建立/移除 crontab 工作排程;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。
范例一:用 dmtsai 的身份在每天的 12:00 发信给自己
[dmtsai@study ~]$ crontab -e
# 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
               0     12     *    *     *       mail -s "at 12:00" dmtsai < /home/dmtsai/.bashrc
         #   分     时   日   月   周     |<==============指令串========================>|

2、系统的配置文件:/etc/crontab,/etc/cron.d

指令:crontab -e(/usr/bin/crontab)是针对使用者的cron来设计的,如果是系统的例行性人物,只需要编辑/etc/crontab文件。cron服务的最低侦测限制是分钟,所以cron每分钟去读取一次/etc/crontab与/var/spool/crontab里面的数据内容

o MAILTO=root:
这个项目是说,当 /etc/crontab 这个文件中的例行性工作的指令发生错误时,或者是该工作的执行结有 STDOUT/STDERR 时,会将错误讯息或者是屏幕显示的讯息传给谁?默认当然是由系统直接寄发一封 mail 给 root 啦!不过, 由于 root 并无法在客户端中以 POP3 之类的软件收信,因此,鸟哥通常都将这个 e-mail 改成自己的账号,好让我随时了解系统的状况!例如:
[email protected]
o PATH=....:还记得我们在第十章的 BASH 当中一直提到的执行文件路径问题吧! 没错啦!这里就是输入执
行文件的搜寻路径!使用默认的路径设定就已经很足够了!
o 『分 时 日 月 周 身份 指令』七个字段的设定这个 /etc/crontab 里面可以设定的基本语法与 crontab -e 不太相同喔!前面同样是分、时、日、月、周五个字段, 但是在五个字段后面接的并不是指令,而是一个新的字段,那就是『执行后面那串指令的身份』为何!这与使用者的 crontab -e 不相同。由于使用者自己的 crontab 并不需要指定身份,但 /etc/crontab 里面当然要指定身份啦!以上表的内容来说,系统默认的例行性工作是以 root 的身份来进行的。

<1>crond 服务读取配置文件的位置
一般来说,crond 预设有三个地方会有执行脚本配置文件,他们分别是:
· /etc/crontab
· /etc/cron.d/*
· /var/spool/cron/*
这三个地方中,跟系统的运作比较有关系的两个配置文件是放在 /etc/crontab 文件内以及/etc/cron.d/* 目录内的文件, 另外一个是跟用户自己的工作比较有关的配置文件,就是放在/var/spool/cron/ 里面的文件群。 

总结:

· 个人化的行为使用『 crontab -e 』:如果你是依据个人需求来建立的例行工作排程,建议直接使用 crontab -e 来建立你的工作排程较佳! 这样也能保障你的指令行为不会被大家看到 (/etc/crontab 是大家都能读取的权限喔!);
· 系统维护管理使用『 vim /etc/crontab 』:如果你这个例行工作排程是系统的重要工作,为了让自己管理方便,同时容易追踪,建议直接写入 /etc/crontab 较佳!
· 自己开发软件使用『 vim /etc/cron.d/newfile 』:如果你是想要自己开发软件,那当然最好就是使用全新的配置文件,并且放置于 /etc/cron.d/ 目录内即可。
· 固定每小时、每日、每周、每天执行的特别工作:如果与系统维护有关,还是建议放置到 /etc/crontab 中来集中管理较好。 如果想要偷懒,或者是一定要再某个周期内进行的任务,也可以放置到上面谈到的几个目录中,直接写入指令即可!

3、一些注意事项
有的时候,我们以系统的 cron 来进行例行性工作的建立时,要注意一些使用方面的特性。 举例来说,如果我们有四个工作都是五分钟要进行一次的,那么是否这四个动作全部都在同一个时间点进行?如果同时进行,该四个动作又很耗系统资源,如此一来,每五分钟的某个时刻不是会让系统忙得要死?呵呵!此时好好的分配一些运行时间就 OK 啦!所以,注意一下:
(1)资源分配不均的问题
当大量使用 crontab 的时候,总是会有问题发生的,最严重的问题就是『系统资源分配不均』的问题,
以鸟哥的系统为例,我有侦测主机流量的信息,包括:
· 流量
· 区域内其他 PC 的流量侦测
· CPU 使用率
· RAM 使用率
· 在线人数实时侦测
如果每个流程都在同一个时间启动的话,那么在某个时段时,我的系统会变的相当的繁忙,所以,这
个时候就必须要分别设定啦!我可以这样做:
[root@study ~]# vim /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4
看到了没?那个『 , 』分隔的时候,请注意,不要有空格符!(连续的意思)如此一来, 则可以将每五分钟工作的流程分别在不同的时刻来工作!则可以让系统的执行较为顺畅呦!
(2) 取消不要的输出项目
另外一个困扰发生在『 当有执行成果或者是执行的项目中有输出的数据时,该数据将会 mail 给MAILTO 设定的账号 』,好啦,那么当有一个排程一直出错(例如 DNS 的侦测系统当中,若 DNS 上层主机挂掉,那么你就会一直收到错误讯息!)怎么办?呵呵!还记得第十章谈到的数据流重导向吧? 直接以『数据流重导向』将输出的结果输出到 /dev/null 这个垃圾桶当中就好了!
(3)安全的检验很多时候被植入木马都是以例行命令的方式植入的,所以可以藉由检查 /var/log/cron 的内容来视察是否有『非您设定的 cron 被执行了?』这个时候就需要小心一点啰!
(4) 周与日月不可同时并存
另一个需要注意的地方在于:『你可以分别以周或者是日月为单位作为循环,但你不可使用「几月几号且为星期几」的模式工作』。 这个意思是说,你不可以这样编写一个工作排程:30 12 11 9 5 root echo "just test" <==这是错误的写法本来你以为九月十一号且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的 9 月 11 号分别进行,如此一来与你当初的规划就不一样了~所以啰,得要注意这个地方!

猜你喜欢

转载自blog.csdn.net/qq_41825534/article/details/83096868