系统延时任务和定时任务

news/2024/10/17 20:33:20/

例行性工作

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工具,这个供读者自行查阅,这里不做介绍。


http://www.ppmy.cn/news/429080.html

相关文章

系统定时任务——at

1)、 at服务管理与访问控制 at命令要想正确执行&#xff0c;需要atd服务的支持。atd服务是独立的服务&#xff0c;所以启动的命令是&#xff1a; [rootlocalhost ~]# service atd start 正在启动 atd&#xff1a; [确定] 如果想要让atd服务开机时自动启动&#xff0c;可以使用如…

AlarmManager定时开关业务

AlarmManagerUtils.setAlarmOpen(context, 1, Integer.valueOf(a1), Integer.valueOf(a2), 0, 1, 0, "提醒开启风扇时间到了"); AlarmManagerUtils.setAlarmClose(context, 1, Integer.valueOf(b1), Integer.valueOf(b2), 0, 2, 0, "提醒关闭风扇时间到了"…

系统定时任务linux,linux系统下定时任务(示例代码)

linux系统定时任务 1、Linux系统定时任务at (1)作用&#xff1a;定时任务&#xff0c;指定一个时间执行一个任务&#xff0c;只能执行一次 (2)用法&#xff1a;at [option] TIME 选项&#xff1a;-V 显示版本信息: -l:列出指定队列中等待运行的作业&#xff1b;相当于atq -d:删…

编写一个闹钟和定时关机工具(MFC VS2010)

这个小工具在自己生活当中能用到&#xff0c;运行软件以后&#xff0c;会显示当前的系统时间&#xff0c;然后你可以设定时间&#xff0c;再选择是定时响铃还是关机。截图如下&#xff1a; 前言&#xff1a;本程序采用visual studio 2010 &#xff0c;对话框类型的应用程序&…

linux cpu跑分软件,Geekbench 5 5.2.3 硬件性能跑分工具 特别版

CPU基准测试 Geekbench 5测量处理器的单核和多核电源&#xff0c;从查看电子邮件到拍照到播放音乐&#xff0c;或者一次性完成所有操作。Geekbench 5的CPU基准测试可以测量新应用领域的性能&#xff0c;包括增强现实和机器学习&#xff0c;因此您将了解系统与前沿的接近程度。 …

软路由cpu性能跑分

软路由cpu性能跑分 cpu核心功耗单核多核N50304/46W14052909N50004/46W11522608N41204/46W11072477N41004/46W9952238N42004/46W8362027N34504/46W7341842J19004/410W5431797 引用&#xff1a; youtube老白

跑分cpu_一款神秘的联发科CPU:跑分达到了622409分

超过10万人正在关注 赶快来关注吧&#xff0c;这里有你想找的热点资讯&#xff0c;这里有你想要的各种资料&#xff0c;还有海量的资源&#xff0c;还在等什么。快来关注&#xff0c;大佬带你开车。 11月30日&#xff0c;安兔兔官方微博曝光了一款神秘的联发科CPU。这款CPU采用…

java cpu 分析工具_java性能分析 - CPU飙高分析工具

背景 有处理过生产问题的同学基本都能遇到系统忽然缓慢&#xff0c;CPU突然飙升&#xff0c;甚至整个应用请求不可用。当出现这种情况下&#xff0c;在不影响数据准确性的前提下&#xff0c;我们应该尽快导出jstack和内存信息&#xff0c;然后重启系统&#xff0c;尽快回复系统…