包括了 crontab 与 at 这两支程序啦!
本文数据主要针对 Fedora Core 4 的系统进行说明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而来, 这个 Red Hat Linux 9 并不是当前大家听到的 RHEL 喔!那是在 RHEL 出现之前的产品,基本上是在 2003 年以前的作品了!Fedora Core 4 则是在 2005 年 6 月份发布,使用的内核是 2.6.11 版,当时是很红的一个作品!只是生命周期太短,所以用这个 Fedora 系列来介绍 Server, 当时的决定确实有点莫名其妙了...
建议您前往本站查找最新版本的 Linux distribution 文章来阅读,比较不会浪费时间。那为何还需要编辑 Fedora Core 4 的数据呢? 鸟哥只想要做个自己曾经撰写过的文档内容保存而已啰! ^_^!最新文章请前往鸟站首页查阅啰!
不论什么时候,创建系统可以自动的运行功能都是必须的!您了解目前系统在缺省的情况中, 每天、每小时、每个月都在做些什么事吗?!您了解『循环的工作』与『仅进行一次的工作』有什么不同吗? 还有还有,如果你想要每年的老婆的生日前一天就发出一封信件提醒自己不要忘记; 又,如果是与初次见面的朋友的约会,又该如何设置啊?看看这一章先!
[root@linux ~]# /etc/init.d/atd restart Stopping atd: [FAILED] Starting atd: [ OK ] # 再设置一下开机时就启动! [root@linux ~]# chkconfig --level 35 atd on看到那个『 OK 』的字样就好啰~关于服务的启动,我们会在后续再加以介绍,如果您真的有兴趣, 那么可以自行到 /etc/init.d/atd 这个 shell script 内去瞧一瞧先! ^_^。 至于那个 chkconfig ,呵呵!您也可以使用 man 先查阅一下啊!我们未来再介绍啦!
[root@linux ~]# at [-m] TIME 参数: -m :当 at 的工作完成后,以 email 的方式通知用户该工作已完成。 TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有: HH:MM ex> 04:00 在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。 HH:MM YYYY-MM-DD ex> 04:00 2005-12-03 强制规定在某年某月的某一天的特殊时刻进行该工作! HH:MM[am|pm] [Month] [Date] ex> 04pm December 3 也是一样,强制在某年某月某日的某时刻进行! HH:MM[am|pm] + number [minutes|hours|days|weeks] ex> now + 5 minutes ex> 04pm + 3 days 就是说,在某个时间点『再加几个时间后』才进行。 范例: 范例一:再过五分钟后,将 /root/.bashrc 寄给 dmtsai 这个用户 [root@linux ~]# at now + 5 minutes at> /bin/mail dmtsai -s "testing at job" < /root/.bashrc at> <EOT> <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束! job 8 at 2005-09-07 10:47 # 上面这行信息在说明,第 8 个 at 工作将在 2005/09/07 的 10:47 进行! 范例二:由于机房预计于 2005/09/16 停电,我想要在 2005/09/15 23:00 关机? [root@linux ~]# at 23:00 2005-09-15 at> /bin/sync at> /bin/sync at> /sbin/shutdown -h now at> <EOT> job 10 at 2005-09-15 23:00 # 您瞧瞧! at 还可以在一个工作内输入多个指令呢!不错吧!事实上,当我们使用 at 时,at 会给用户一个 bash shell 让用户下达工作指令, 此时,建议你最好使用绝对路径来下达你的指令,比较不会有问题喔!那我们知道每个指令都可能会有 standard output/standard error 啊,这些可能会输出到屏幕上面的信息会跑去哪里? 呵呵!这些本来应该在屏幕上面出现的信息通通会以 email 的方式发送到用户的 mailbox 里面去! 而缺省如果没有 stdout/stderr 时,就不会有任何消息发送给用户了。但你可以使用 at -m 这个参数来强制 at 发送一个运行完毕的 email 消息给你自己喔! ^_^
[root@linux ~]# atq [root@linux ~]# atrm [jobnumber] 范例一:查找目前主机上面有多少的 at 工作调度? [root@linux ~]# atq 10 2005-09-15 23:00 a root # 上面说的是:『在 2005/09/15 的 23:00 有一项工作,该项工作指令下达者为 # root』而且,该项工作的工作号码 (jobnumber) 为 10 号喔! 范例二:将上述的第 10 个工作移除! [root@linux ~]# atrm 10 [root@linux ~]# atq # 没有任何信息,表示该工作被移除了!利用 atq 与 atrm 来控制这个 at 的工作吧! ^_^
[root@linux ~]# crontab [-u username] [-l|-e|-r] 参数: -u :只有 root 才能进行这个任务,亦即帮其他用户创建/移除 crontab; -e :编辑 crontab 的工作内容 -l :查阅 crontab 的工作内容 -r :移除 crontab 的工作内容 范例: 范例一:用 dmtsai 在每天的 12:00 发信给自己 [dmtsai@linux ~]$ crontab -e # 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。 0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc #分 时 日 月 周 |<==============指令串========================>|任何用户只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达『 crontab -e 』去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后,输入『 :wq 』保存后离开 vi 就可以了! 而每项工作的格式都是『 五个时间参数 实际动作指令 』,那么那五个时间参数代表什么呢?
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 |
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
特殊字符 | 代表意义 |
* | 代表任何时刻都接受的意思!举例来说,上表的范例一,那个日、月、周都是 * , 就代表着『不论何月、何日的礼拜几的 12:00 都运行后续指令』的意思! |
, | 代表分隔时段的意思。举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是:
|
- | 代表一段时间范围内,举例来说, 8 点到 12 点之间的每小时的 20 分都进行一项工作:
|
/n | 那个 n 代表数字,亦即是『每隔 n 单位间隔』的意思,例如每五分钟进行一次,则:
|
例题:假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 发一封信给他,这封信的内容已经写在
/home/dmtsai/lover.txt 内了,该如何进行? 答:
|
例题:假如每五分钟需要运行 /home/dmtsai/test.sh 一次,又该如何? 答:
|
例题:假如你每星期六都与朋友有约,那么想要每个星期五下午 4:30 告诉你朋友星期六的约会不要忘记,则: 答:
|
[dmtsai@linux ~]$ crontab -l 59 23 1 5 * mail kiki < /home/dmtsai/lover.txt */5 * * * * /home/dmtsai/test.sh 30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt # 注意,若仅想要移除一项工作而已的话,必须要用 crontab -e 去编辑~ # 如果想要全部的工作都移除,才使用 crontab -r 喔! [dmtsai@linux ~]$ crontab -r [dmtsai@linux ~]$ crontab -l no crontab for dmtsai看到了吗? crontab 『整个内容都不见了!』所以请注意:『如果只是要删除某个 crontab 的工作项目,那么请使用 crontab -e 来重新编辑即可!』如果使用 -r 的参数,是会将所有的 crontab 数据内容都删掉的!千万注意了!
[root@linux ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # 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 号 分 时 日 月 周 运行者身份 指令串看到这个文件的内容你大概就了解了吧!呵呵,没错!这个文件与将刚刚我们下达 crontab -e 的内容几乎完全一模一样!只是有几个地方不太相同:
[root@linux ~]# vi /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root CMD1
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root CMD2
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root CMD3
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root CMD4
看到了没?那个『 , 』分隔的时候,请注意,不要有空白字符!(连续的意思)如此一来,
则可以将每五分钟工作的流程分别在不同的时刻来工作!则可以让系统的运行较为顺畅呦!