linux计划任务
Linux的计划任务
Linux系统支持一些能够自动执行的服务我们称其为计划任务:
at:指定一个时间执行一个任务
cron:根据一个时间表自动执行任务
anacron:在一个指定时间间隔错过后自动执行任务
at
at服务:安排一个任务在未来执行
at服务需要系统后台有一个atd进程
常用指令
at:安排延时任务
atq:查询当前的等待任务
atrm:删除等待任务
batch:以一个低优先级延时执行任务
at命令的写法非常灵活:
at 18:00pm July 9
at 6 pm Monday
at 2:00
at noon + 5 minutes
回车后可以在之后的at>提示符下输入任务指令,完成后Ctrl+D存盘退出。
范例:
[kevinz @stationxx kevinz]$at now + 2 minutes
at>updatedb
at><Ctrl+D>
[kevinz @stationxx kevinz]$
at的使用控制
at的使用控制文件
/etc/at.allow
/etc/at.deny
基于用户的使用控制
默认情况下,任何用户都可以使用at服务,但这样是不安全的
如果系统中存在at.allow,则只有在文件中的用户才可以使用at服务
如果系统中存在at.deny,则列在文件中的用户不可以使用at服务,其他人可以
cron
n 允许系统根据时间表自动完成任务
n 服务需要后台运行的系统进程crond
n 开关cron服务
n 系统管理员可以用service crond start|stop来开关cron服务
n 用chkconfig或ntsysv选择cron服务的默认开启关闭。
cron
crond是一个常驻程序 (daemon),在开机时激活crond时,它会自动去检查/var/spool/cron 目录下面看看是否有任何cron文件。每一个user的可以去设定自己所要排定执行的工作。在这一个目录底下,每一个user会有一个属于他uid名称的cron文件,crond会自动将这些user的cron文件加载至内存中,并定期去执行每个user的cron文件,也就是说用户不需要登录就可以执行计划任务。另外,crond也会去读取 /etc/crontab 的内容。
首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将载入内存。例如一个用户名为kevinz 的用户,它所对应的crontab文件就应该是/var/spool/cron/kevinz。也就是说,以该用户命名的crontab文件存放在/var/spool/cron目录下面。cron命令还将搜索 /etc/crontab文件,这个文件是用不同的格式写成的. cron启动以后,它将首先检查是否有用户设置了crontab文件,如果没有就转入 “休眠”状态,释放系统资源。因此该后台进程占用资源极少,它每分钟“醒”过来一次,查看当前是否有需要运行的命令。命令执行结束后,任何输出都将作为邮件发送给 crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。
/var/spool/cron下的cron和/etc/crontab下的cron是不同的,/var/spool/cron下的cron是用户级的,而/etc/crontab下的是系统级的!
定制个人计划任务
用户级别
crontab –e:编辑当前的守护进程表
crontab –l:列出当前的守护进程表
crontab –r:删除当前的守护进程表
crontab –u user:以某一个用户的身份
/var/spool/cron:存放用户守护进程表
定制个人计划任务
crontab命令用于建立、删除或者列出用于驱动cron后台进程的表格。也就是说,用户把需要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件,下面就来看看如何创建一个crontab文件。 在/var/spool/cron下的crontab文件不可以直接创建或者直接修改,crontab文件是通过crontab命令得到的。现在假设有个用户名为kevinz,需要创建自己的一个 crontab文件。
[kevinz @stationxx kevinz]$ crontab –e kevinz (默认不需要加用户名,系统认为你是编辑自己的cron)
crontab格式
* * * * * echo “hello” | wall
分钟/小时/日/月/星期 命令
#每分钟向所有在线用户的屏幕上发送’hello’
crontab格式
该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令,每个域之间使用空格或者制表符分隔。格式如下∶
minute hour day-of-month month-of-year day-of-week commands
第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五项是一周的星期几,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用 *代替。因为*是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。
时间表示格式如下:
域 允许值范围
----- --------------
分钟 0-59
小时 0-23
日 1-31
月 1-12 (或者用jan/feb等名字)
星期几 0-7 (0或7是周日,也可以用mon,tue等表示)
定制系统计划任务
系统级别
采用/etc/crontab作为其crond的运行配置文件
与个人的crontab文件格式有所不同
默认情况下,系统会自动执行以下目录内的脚本
/etc/cron.hourly:每小时的零一分
/etc/cron.daily:每天四点零二分
/etc/cron.weekly:每周日四点二十二分
/etc/cron.monthly:每月一日四点四十二分
/etc/cron.d/目录下存放着附加的系统守护文件
• 系统的守护任务列表中第六项为命令运行人,第七项才是运行任务。
• 使用run-parts来代替命令,表示运行其后目录内的所有可执行文件。
crontab的使用限制
默认情况下,所有用户都可以定制自己的守护任务
系统的守护任务只能由root来编辑
限制/允许 用户使用cron
/etc/cron.allow
/etc/cron.deny
• 如果系统中存在cron.allow,则只有在列在文件中的用户才可以使用crontab指令来定制自己的守护任务。
• 如果系统中存在cron.deny,则列在文件中的用户不可以使用crontab指令来定制自己的守护任务,其他人可以。
anacron
cron服务的扩展
防止非24小时开机的计算机遗漏守护任务
每次计算机通电时自动检测
配置文件:/etc/anacrontab
范例:
7 80 cron.weekly run-parts /etc/cron.weekly
anacron 任务被列在配置文件 /etc/anacrontab 中。文件中的每一行都代表一项任务,格式是:
period delay job-identifier command
• period — 命令执行的频率(天数)
• delay — 延迟时间(分钟)
• job-identifier — 任务的描述,用在 anacron 的消息中,并作为作业时间戳文件的名称,只能包括非空白的字符(除斜线外)。
• command — 要执行的命令
对于每项任务,anacron 先判定该任务是否已在配置文件的 period 字段中指定的期间内被执行了。如果它在给定期间内还没有被执行,anacron 会等待 delay 字段中指定的分钟数,然后执行 command 字段中指定的命令。
任务完成后,anacron 在 /var/spool/anacron 目录内的时间戳文件中记录日期。只有日期被记录(无时间),而且job-identifier 的值被用作时间戳文件的名称。
和 cron 配置文件一样,SHELL 和 PATH 之类的环境变量可以在 /etc/anacrontab 文件的前部定义。
默认的配置文件看起来和以下相似:
# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# These entries are useful for a Red Hat Linux system.
1 70 cron.daily run-parts /etc/cron.daily
7 85 cron.weekly run-parts /etc/cron.weekly
30 85 cron.monthly run-parts /etc/cron.monthly
tmpwatch
n 为指定目录清理古旧文件
n 有效应用于防止/tmp目录被填满
n tmpwatch每天在/etc/cron.daily中运行
n 语法:
/usr/bin/tmpwatch 小时数 指定目录
范例:
[root @stationxx root] # /usr/bin/tmpwatch 240 /tmp
删除/tmp目录下经过240小时未被使用的文件。