相对于 at 是仅执行一次的工作,循环执行的例行性工作调度则是由 cron (crond) 这个系统服务来控制的。刚刚谈过 Linux 系统上面原本就有非常多的例行性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以进行例行性工作调度,所以, Linux 也提供使用者控制例行性工作调度的指令 (crontab)。
15.3.1 使用者的设置
使用者想要创建循环型工作调度时,使用的是 crontab 这个指令。不过,为了安全性的问题, 与 at 同样的,我们可以限制使用 crontab 的使用者帐号。使用的限制数据有:
/etc/cron.allow: 将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;
/etc/cron.deny: 将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。
与 at 很像吧!同样的,以优先顺序来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可, 免得影响自己在设置上面的判断!一般来说,系统默认是保留 /etc/cron.deny , 你可以将不想让他执行crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行。
当使用者使用 crontab 这个指令来创建工作调度之后,该项工作就会被纪录到/var/spool/cron/ 里面去了,而且是以帐号来作为判别的。举例来说, dmtsai 使用 crontab后, 他的工作会被纪录到 /var/spool/cron/dmtsai 里头去!但请注意,不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法执行 cron 。另外, cron 执行的每一项工作都会被纪录到 /var/log/cron 这个登录文件中,所以,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录文件。
默认情况下,任何使用者只要不被列入 /etc/cron.deny 当中,那么他就可以直接下达“ crontab-e ”去编辑自己的例行性命令了!整个过程就如同上面提到的,会进入 vi 的编辑画面, 然后以一个工作一行来编辑,编辑完毕之后输入“ :wq ”储存后离开 vi 就可以了! 而每项工作 (每行) 的格式都是具有六个字段,这六个字段的意义为:
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 指令 |
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 |
比较有趣的是那个“周”。周的数字为 0 或 7 时,都代表“星期天”的意思!另外,还有一些辅助的字符,大概有下面这些:
例题:假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 发一封信给他,这封信的内容已经写在 /home/dmtsai/lover.txt 内了,该如何进行?答:直接下达 crontab -e 之后,编辑成为:
59 23 1 5* mail kiki < /home/dmtsai/lover.txt
那样的话,每年 kiki 都会收到你的这封信。
例题:假如每五分钟需要执行 /home/dmtsai/test.sh 一次,又该如何?答:同样使用 crontab-e 进入编辑:
*/5 * * * * /home/dmtsai/test.sh
那个 crontab 每个人都只有一个文件存在,就是在 /var/spool/cron 里面。
例题:假如你每星期六都与朋友有约,那么想要每个星期五下午 4:30 告诉你朋友星期六的约会不要忘记,则:答:还是使用 crontab -e 啊!
30 16 * * 5 mail friend@his.server.name < /home/dmtsai/friend.txt