1. 其实就是,预先设置,自动执行。有两类:at和crontab
linux上常见的例行性任务有:
2.at
启动:
- [root@www ~]# /etc/init.d/atd restart
- 正在停止 atd: [ 确定 ]
- 正在启动 atd: [ 确定 ]
- # 再设定一下开机时就启动这个服务,免得每次重新开机都得再来一次!
- [root@www ~]# chkconfig atd on
我们使用 at 这个指令来产生所要运作的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与执行了
要对at指令进行限制,利用/etc/at.allow 与 /etc/at.deny这两个文件:
使用方法:
- [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 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
- HH:MM YYYY-MM-DD ex> 04:00 2009-03-17
- 强制规定在某年某月的某一天的特殊时刻进行该工作!
- HH:MM[am|pm] [Month] [Date] ex> 04pm March 17
- 也是一样,强制在某年某月某日的某时刻进行!
- HH:MM[am|pm] + number [minutes|hours|days|weeks]
- ex> now + 5 minutes ex> 04pm + 3 days
- 就是说,在某个时间点‘再加几个时间后’才进行。
注意,使用at的时候要用命令的绝对路径,at 在运作时,会跑到当时下达 at 指令的那个工作目录。
at 的执行与终端机环境无关,而所有 standard output/standard error output 都会传送到执行者的 mailbox 去啦!所以在终端机当然看不到任何资讯。那如果想把信息echo到终端怎么办? 可以透过终端机的装置来处理!假如你在 tty1 登入,则可以使用‘ echo "Hello" > /dev/tty1 ’来取代。
at工作管理:
- [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’而且,该项工作的工作号码 (jobnumber) 为 5 号喔!
- 范例二:将上述的第 5 个工作移除!
- [root@www ~]# atrm 5
- [root@www ~]# atq
- # 没有任何资讯,表示该工作被移除了!
batch:系统有空时才进行背景任务
其实 batch 是利用 at 来进行指令的下达啦!只是加入一些控制参数而已。这个 batch 神奇的地方在于:他会在 CPU 工作负载小于 0.8 的时候,才进行你所下达的工作任务啦!工作负载是值CPU 在单一时间点所负责的工作数量
3.crontab
也有/etc/cron.allow 和 /etc/cron.deny,但不存在atd当使用者使用 crontab 这个指令来建立工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的喔!举例来说, dmtsai 使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/dmtsai 里头去!但请注意,不要使用 vi 直接编辑该档案, 因为可能由于输入语法错误,会导致无法执行 cron 喔!另外, cron 执行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,所以��,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档
语法:
- [root@www ~]# crontab [-u username] [-l|-e|-r]
- 选项与参数:
- -u :只有 root 才能进行这个任务,亦即帮其他使用者建立/移除 crontab 工作排程;
- -e :编辑 crontab 的工作内容
- -l :查阅 crontab 的工作内容
- -r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。
- 范例一:用 dmtsai 的身份在每天的 12:00 发信给自己
- [dmtsai@www ~]$ crontab -e
- # 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
- 0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
- #分 时 日 月 周 |<==============指令串========================>|
一共有六个栏位:
其中,周的0和7都代表礼拜天,当然,周和日月是不能同时存在的
系统的设定档:/etc/crontab
cron 这个服务的最低侦测限制是‘分钟’,所以‘ cron 会每分钟去读取一次 /etc/crontab 与 /var/spool/cron 里面的资料内容 ’,因此,只要你编辑完 /etc/crontab 这个档案,并且将他储存之后,那么 cron 的设定就自动的会来执行了
这个文件的内容:
- [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.monthly <==每个月 1 号
- 分 时 日 月 周 执行者身份 指令串
你可以把要执行的命令放到cron.hourly等目录下,也可以直接下达(最后面的格式)
注意,当有很多指令要例行执行时,需要合理安排资源,错开执行时间。
4.anacron
anacron 并不是用来取代 crontab 的,anacron 存在的目的是处理非 24 小时一直启动的 Linux 系统的 crontab 的执行!所以 anacron 并不能指定何时执行某项任务, 而是以天为单位或者是在开机后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务执行一遍后,anacron 就会自动停止了。