系统延时任务和定时任务

例行性工作

linux系统会主动帮我们做一些日常工作,实际上linux系统要正常运行,某些后台工作必须要定时进行,常见的例行性任务有:

1.日志文件的轮替(logrotate)
2.新建的locate数据库
3.whatis数据库的建立
4.rpm软件日志文件的管理
5.删除临时文件
6.网络服务相关的分析行为(比如安装了apache系统通常会主动分析该软件的日志文件,某些网络的认证信息是否过期的问题)

一.系统延时任务
系统延时任务是通过at命令实现的,负责这个延时任务的服务是atd服务,通常这个服务默认是开启的,但并非所有的linux发行版都会默认把它打开。某些时候我们需要手动启用才行 (/etc/init.d/atd start)。

####1.延时任务发起的过程

at命令生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at/目录内,该工作便能等待atd这个服务的取用与执行
限制用户的at使用权:
为了安全起见,除了我们指定的帐号,不能使用at。可以通过/etc/at.allow与/etc/at.deny这两个文件进行at的使用限制。
at.deny默认存在系统中,at.allow默认系统中不存在。具体的机制如下:
先寻找/etc/at.allow文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at,当此文件存在时/etc/at.deny文件失效,并且所有普通用户执行at的权利被禁止,只有此文件中的用户才能使用at。
没有/etc/at.allow文件就寻找/etc/at.deny,写在这个文件中的用户不能使用at,没有写在这个文件中的用户都可以使用at
如果两个文件都不存在则只有root用户可以使用at。

####2.at的使用实例

使用案例:
at

[root@burgess ~]#at   [-mldv]   TIME
参数:
-m : 当at的工作完成后,即使没有输出信息,以email通知用户该工作已完成。
-l : at -l相当于atq,列出目前系统上面的所有用户的at调度
-v : at -d 相当于atrm,可以取消一个在at调度中的工作
-c :可以列出后面接的该工作的实际命令内容

TIME: 时间格式(这里可以定义什么时间要进行at的工作)
HH:MM          在今日的HH:MM时刻进行,若已经超过该时刻,则明天该时间进行此工作
HH:MM YYYY-MM-DD	强制规定某年某月某日某天某时刻进行该工作
例如:at  02:00 2017-09-13
HH:MM[am|pm]   [mouth]   [date]	强制某月某日某时刻进行
例如 at 02pm may 5
HH:MM[am|pm]  + number [minutes|hours|days|weeks]	某个时间点再加几个分钟或小时或天或周进行

at2

####3.batch命令
系统有空后才进行的后台任务,batch其实是利用at进行命令的执行,只是加入了一些控制参数而已。
batch的好处在于它会在cpu负载小于0.8的时候,才执行你所定义的工作任务。batch命令的执行跟at相同。

例如:

在2017/12/12 00:00关机

[root@burgess ~] batch 00:00 2017-12-12
at>sync
at>sync
at>shutdown -h now
at><EOT>

当系统负载太高则暂缓执行

二、定时任务
延时任务只能执行一次,对任务进行一次调度。但是如果我们想要循环调度某个工作,比如每天早上的7:00钟定时闹钟程序执行。
定时任务使用crontab命令。
####1.限制能够使用crontab的用户
/etc/cron.allow:
凡是写进这个文件的用户可以使用crontab,不在这个文件的用户不允许使用crontab
/etc/cron.deny:
写进这个文件的用户不可以使用crontab,未记录到这个文件的用户可以使用crontab
/etc/cron.allow 比 /etc/cron.deny优先级高,这两个文件只选择一个来限制,因此只需要保留一个即可。一般情况下系统默认保留/etc/cron.deny
####2.cron的工作过程
当用户使用crontab命令新建工作调度之后,该项工作会被记录到/etc/spool/cron/目录下,以帐号作为区别,例如:www这个用户使用crontab后,他的工作就会被记录到/var/spool/cron/www里边去。cron执行的每一项工作都会被记录到/var/log/cron这个日志文件当中。所以查看linux是否植入木马,也可以查询一下/var/log/cron日志文件。
####3.cron的语法
默认情况下系统只有/etc/cron.deny,没有/etc/cron.allow所以只要没被列入/etc/cron.deny的用户都可以使用crontab -e编辑定时任务

[root@burgess ~]# crontab	[-u username]	[-l][-e][-r]
参数:
-u : 只有root用户可以进行,帮助其他用户新建/删除crontab工作调度
-e : 编辑crontab的内容
-l : 查看crontab的工作内容
-r : 删除所有的crontab的工作内容

范例:每5分钟执行/mn/dfg.sh脚本文件
[root@burgess ~]# crontab -e
#此时会进入vim编辑界面让你编辑工作,每项工作都是一行
*/5	*	*	*	* 	/mnt/dfg.sh

每行6个字段,代表一项工作,这6个字段代表的意义如下:
cron
tips:周那个字段数字0或7都代表星期天

cron1

举例来写吧
1.假如12月20日是你女朋友的生日,你想要每年的12月19日23:59发送一封邮件给他,这封信的内容在 /home/kiosk/.lover.txt内,该怎么来写

59	23	19	12	*   mail   lorie   <   /home/kiosk/.lover.txt

2.每天00:00点对kiosk用户家目录下的workspace目录进行备份,备份到/mnt/下

0	0	*	*	*   cp -rpf /home/kiosk/workspace       /mnt

3.加入你跟朋友每周六有约会,你想在每周五的下午18:00告诉朋友不要忘记周六的约会,则:

0	18	*	*	*   mail  myfriend@his.server.name   < /home/kiosk/firends.txt	

写完之后我们可以通过

crontab	  -l   #查看工作
crontab	  -r   #删除工作(这个删除会删除所有的crontab任务)
要想一项一项删除要用crontab -e 编辑

####4.系统配置文件:/etc/crontab
crontab -e是针对用户的cron来设计的,如果是系统级的定时任务就不需要crontab -e编辑了,只需要编辑/etc/crontab文件就可以了。
crontab -e的crontab其实是/usr/bin/crontab这个执行文件,编辑完会记录到/var/spool/cron里边,/etc/crontab是一个纯文本文件。
cron服务最低检测限制是“分钟“,所以cron会每分钟去读取一次/etc/crontab与/etc/spool/cron里边的数据内容,编辑完/etc/crontab文件保存,cron的设置就会自动执行。
tips:出于某些原因,有的linux系统或其他的unix系统中,由于crontab是读到内存当中的,所以编辑完/etc/crontab之后并不会马上执行,这时应该重启crond服务。

查看/etc/crontab文件
[root@burgess Desktop]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
.....   ##省略中间的行
01	*	*	*	*	root	run-parts	/etc/cron.hourly
02	4	*	*	*	root	run-parts	/etc/cron.daily
22	4	*	*	0	root	run-parts	/etc/cron.weekly
42	4	1	*	*	root	run-parts	/etc/cron.monthly
分	时	日	月	周	执行者身份	命令串

MAILTO=root
这个选项是说,当/etc/crontab这个文件的定时任务发生错误时,或者该工作的执行结果有标准输出或标准错误时发邮件给root
PATH 是输入执行文件的路径
这里定时任务的写法跟crontab -e编写时唯一不同的就是加入了用户身份这一列。
run-parts其实是一个脚本文件(/usr/bin/run-parts) 这个命令会将其后面接的目录内的所有可执行文件找出来并执行。

5.注意事项
1.资源分配不均
用cron进行定时任务时一定要划分好时间,以免导致资源分配不均问题,当所有的定时任务都在一个时间点执行时系统很容易负载
2.取消不必要的输出项
当有执行结果或者下执行的选项有输出数据时(stdout|error)会发邮件给MAILTO设定的账号。所以不必要的输出直接重定向输出到/dev/null
3.安全检测
很多时候木马程序就是以定时任务的方式植入的,所以检查/var/log/cron中是否有非你设置的cron
4.周与日、月不可共存
可以分别以周或者日、月为单位最为循环,但不可使用‘几月几号且为星期几’的模式,不可以有这样的调度:

59	23	19	12	5   mail   lorie  < 	/home/kiosk/.lover.txt

本来以为12月19号且为星期五才会执行,但事实是系统可能会每个星期五执行一次,或每年的12月19日分别进行,如此一来与我们的预期就不一致了,上述写法是不对的。
5.如果你的linux是服务器24小时不断电,则有atd和crond这两个 服务管理延时、定时任务即可,如果是个人主机当然是会关机的,例如你的定时任务在每天凌晨,但是你晚上关机了,这时就得要anacron工具,这个供读者自行查阅,这里不做介绍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值