系统延时任务和定时任务

来源:互联网 发布:linux 移植mt7688 编辑:程序博客网 时间:2024/06/05 01:03

例行性工作

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-13HH:MM[am|pm]   [mouth]   [date] 强制某月某日某时刻进行例如 at 02pm may 5HH:MM[am|pm]  + number [minutes|hours|days|weeks]   某个时间点再加几个分钟或小时或天或周进行

at2

3.batch命令

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

例如:在2017/12/12 0000关机[root@burgess ~] batch 00:00 2017-12-12at>syncat>syncat>shutdown -h nowat><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/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root.....   ##省略中间的行01  *   *   *   *   root    run-parts   /etc/cron.hourly02  4   *   *   *   root    run-parts   /etc/cron.daily22  4   *   *   0   root    run-parts   /etc/cron.weekly42  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工具,这个供读者自行查阅,这里不做介绍。

原创粉丝点击