- Linux工作调度的种类
- at:at是个可以处理仅执行一次就结束调度的命令,不过要执行at,必须有atd服务。某些新版的distributions中,atd可能默认没有启动。
- crontab:crontab所设置的工作将会循环一直进行下去。这个命令除了可以使用命令执行外,也可以编辑/etc/crontab来支持。让crontab生效的服务则是crond这个服务。
- Linux上常见的例行工作
- 进行日志文件的轮替(log rotate):适时将日志文件数据挪一挪,让旧数据与新数据分别存放,则比较可以有效地记录日志信息。
- 日志文件分析logwatch的任务:系统发生软件问题,硬件错误,绝大部分的错误信息都会被记录在日志文件中,因此系统管理员的重要任务之一就是分析日志文件。所以CentOS提供了logwatch来主动分析日志信息。
- 新建locate数据库:locate命令是通过已经存在的文件名数据库来进行系统文件名的查询。文件名数据库是放置再/var/lib/mlocate/中。系统更新这个数据库就是通过update。
- whatis数据库的建立:whatis是与man page有关的一个查询命令,不过要使用whatis命令时,必须拥有whatis数据库,而这个数据库也是通过系统例行工作调度来自动执行的。
- RPM软件日志文件的新建/RPM是一种软件管理的机制。由于系统可能会经常更改软件,包括软件的新安装,非经常性更新等,都会造成软件文件名的区别。为了方便追踪,系统帮我们将文件名做个排序的记录。
- 删除临时文件:某些软件再运行时会生成临时文件,但是当这个软件关闭的时候,临时文件可能不会主动删除。系统通过例行工作调度执行名为tmpwatch的命令来删除这些临时文件。
- 与网络服务有关的分析行为:如果安装了WWW服务器软件,那么你的Linux系统通常就会主动分析该软件的日志文件,同时某些认证的网络信息是否过期的问题,这些Linux都会自动帮你检查。
- 仅执行一次的工作调度
-
atd的启动和at运行的方式
要使用单一工作调度,必须开启atd[root@www~]# /etc/init.d/atd restart <==启动atd [root@www~]# chkconfig atd on <==设置开机时启动这个服务,免得每次重新启动都要再来一次
-
at的运行方式
我们用at命令来生成所要运行的工作,并将这个工作以文本文件的方式写入/var/spool/at目录内,该工作便能等待atd这个服务的取用与执行了。- 我们可以用/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在这个文件中的用户则不能使用at(即使没有写在at.deny中)
- 如果/etc/at.allow不存在,就寻找/etc/at.deny这个文件,若写在这个at.deny的用户则不能使用at,而没有在这个at.deny文件中的用户就可以使用at
- 如果两个文件都不存在,那么只有root可以使用at命令
-
实际运行单一工作调度
[root@www~]# at [-mldv] TIME [root@www~]# at -c 工作号码
参数 含义 -m 当at工作完成后,即使没有输出信息,以email通知用户该工作完成 -l at -l相当于atq,列出目前系统上面的所有该用户的at调度 -d at -d相当于atrm,可以取消一个在at调度中的工作 -v 可以使用较明显的时间格式列出at调度中的任务列表 -c 可以列出后面接的该项工作的实际命令内容 TIME时间格式:这里可以定义什么时候要进行at这项工作的时间
格式 含义 HH:MM 几点几分,如果今天已经超过了,就要明天这个时候进行 ex>04:00 HH:MM YYYY-MM-DD 强制规定在某年某月某日某一天的特殊时刻进行该工作 ex>04:00 2019-01-17 HH:MM[am|pm] [Month] [Date] 强制规定在某年某月某日某一天的特殊时刻进行该工作 ex>04:00 am March 17 HH:MM[am|pm] + number [minutes|hours|days|weeks] 在某个时间点再加上几个时间之后,ex>04pm + 3 days [root@www~]# at now + 5 minutes #执行at会进入at shell环境,让你执行多重命令 at> /bin/mail root -s "testing at job" < /root/.bashrc at> <EOT> <==这里输入[ctrl]+d就会出现<EOF>,代表结束 job 4 at 2009-03-14 15:38 #说明第4个at工作将会在2009年/03/14的15:38进行
[root@www~]# at 23:00 2009-03-07 at> /bin/sync at> /bin/sync at> /sbin/shutdown -h now at> <EOT> job 5 at 2009-03-17 23:00
注意,如果at shell命令内没有任何信息输出,那么at默认不会发Email给执行者,如果想让at命令无论如何都要发送Email,那么就要用at -m命令。
由于at在工作调度的使用上,系统会将该项at工作独立出你的bash环境,直接交给系统的atd程序来接管,因此,当你执行了at的工作之后就可以立刻脱机,剩下的工作就完全交给Linux管理即可。
at的工作管理,执行了at之后才发现命令错误,可以利用atq和atrm把它删除。[root@www~]# atq [root@www~]# atrm [jobnumber] 例子: 查询目前主机上有所少个at工作调度 [root@www~]# atq 5 2009-03-17 23:00 a root #上面的意思是在2009/03/17的23:00有一项工作,该工作命令执行者为root,而且,该项工作的工作号码是5 [root@www~]# atrm 5 #说明删除工作号为5的工作 [root@www~]# atq #没有显示任何信息,说明工作已经被删除
如果你是在一个非常忙碌的系统下运行at,那么你可以通过batch指定你的工作在系统较闲的时候进行。
batch可以指定在系统有空时才进行后台任务,它会在CPU工作负载小于0.8的时候,才进行你所执行的工作任务。负载的意思是CPU在单一时间点所负责的工作数量,不是CPU的使用率。#同样进行关机操作,但是如果当时系统负载太高,则暂缓执行 [root@www~]# batch 23:00 2009-03-17 at> sync at> sync at< shutdown -h now at> <EOT> job 6 at 2009-03-17 23:00
-
- 循环执行的例行性工作调度
相对于at是仅执行一次的工作,循环执行的例行性工作调度则是由cron(crond)这个系统服务来控制的。- 用户设置
/etc/cron.allow 将可以使用crontab的账号写入其中,若不在这个文件内的用户则不可使用crontab。
/etc/cron.deny 将可以使用crontab的账号写入其中,若未记录到这个文件当中的用户则可以使用crontab
以优先级来说,cron.allow的优先级高于cron.deny。当用户使用crontab这个命令来新建工作调度之后,该项工作就会被记录到/var/spool/cron里面,而且是以账号来作为判别。举例,用户名为dmtsai使用crontab后,他的工作会被记录到/var/spool/cron/dmtsai里面。注意,不要使用vi直接编辑文件,因为可能由于输入语法错误,会导致无法执行cron。
crontab参数参数 含义 -u 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度 -e 编辑crontab的工作内容 -l 查阅crontab工作内容 -r 删除所有crontab的工作内容,若要删除一项,请用-e去编辑 [root@www~]# crontab -e #用dmtsai的身份在每天的12:00发信给自己 #此时会进入vi编辑界面让你编辑工作,注意每一项工作都是一行 0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.basgrc #分 时 日 月 周 |<========命令串=================>|
注意周的部分,0或者7都代表星期天。同时还有一些辅助字符。代表意义 分钟 小时 日期 月份 周 命令 数字范围 0~59 0~23 1~31 1~12 0~7 命令 特殊字符 代表意义 * 任何时刻都接受的意思。如果日,月,周都是*号,代表不论何月何日的星期几 , 代表分隔时段的意思,举例子,如果执行工作是3:00到6:00,所以就是0 3,6 * * * command - 代表一段时间范围,举例,8点到12点之间每小时的20分都进行一项工作 20 8-12 * * * command /n(斜线) 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则*/5 * * * * command 也可以把*/5写成0-59/5 - 系统的配置文件:/etc/crontab
crontab -e 这个命令是针对用户,如果是系统的例行性任务,就不需要以crontab -e 来管理你的例行性工作调度,只需要编辑/etc/crontab这个文件就可以。其中有一点需要注意,crontab -e 这个crontab其实是/usr/bin/crontab这个执行文件,但是/etc/craontab是一个纯文本文件。
基本上,cron这个服务的最低检测限制就是分钟,所以cron会每分钟去读取一次/etc/crontab与/var/spool/cron里面的数据内容,因此,只要你编辑完/etc/crontab这个文件,并且将它保存之后,那么cron的设置就会自动会来执行。
查看/etc/crontab的内容
在crontab里面一些字段的含义[root@www~]# cat /etc/crontab SHELL=/bin/bash <==使用哪种shell接口 PATH=/sbin:/bin:/usr/sbin:/usr/bin <==执行文件查找路径 MAILTO=root <==若有额外STDOUT,以email将数据送给谁 HOME=/ <==默认此shell的主文件夹所在 #run-parts 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.weekly <==每个月1号
字段 含义 MAILTO=root 当/etc/crontab这个文件中的例行性工作的命令发生错误时,或者是该工作 PATH=… 这里输入的是执行文件的查找路径,使用默认的路径设置就已经足够了 01 * * * * root run-parts /etc/cron.hourly 如果想让系统每小时主动帮你执行某个命令,就将该命令写成script,并将该文件放置到/etc/cron.hourly/目录下即可
- 用户设置
- 可唤醒停机期间的工作任务
- 如果Linux主机是24小时全天,全年无休的服务器,那么你只要ad与crond这两个服务来管理例行工作即可,但是如果你的服务器并非24小时不关机,那么就需要用anacron。
anacron不是用来指定何时执行任务的,而是以天为单位或者是在开机之后立刻进行anacron的操作的,它会去检测停机期间应该进行但是没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止。anacron其实也是通过crontab来进行的,因此anacron运行的时间通常有两个,一个是系统开机期间运行,一个是写入crontab的调度中 - anacron与/etc/anacrontab
anacron其实是一个程序并非一个服务。基本上anacron的语法如下[root@www~]# anacron [-sfn] [job] [root@www~]# anacron -u [job]
参数 含义 -s 开始连续执行各项工作,会依据时间记录文件的数据判断是否进行 -f 强制进行,而不去判断时间记录文件的时间戳 -n 立刻进行未进行的任务,而不延迟等待时间 -u 仅更新时间记录文件的时间戳,不进行任何工作 job 由/etc/anacrontab定义的各项工作名称
- 如果Linux主机是24小时全天,全年无休的服务器,那么你只要ad与crond这两个服务来管理例行工作即可,但是如果你的服务器并非24小时不关机,那么就需要用anacron。
Linux例行工作
最新推荐文章于 2025-06-30 11:49:06 发布