linux计划任务

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小时未被使用的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值