at : 这个工作仅执行一次就从 Linux 系统中的排程中取消;
cron : 这个工作将持续例行性的作下去!

at命令

既然是工作排程,那么自然要有写入工作的纪录档啰!没错啦! 我们可以使用 at 这个指令来帮忙写入工作纪录档,工作纪录档预设的放置目录在 /var/spool/at 底下,在写入 at 记录档后,该工作便进入排程当中并等待执行。 当然啦,要让 /var/spool/at 目录底下的工作被实际运作,必须要启动我们上面提到的 atd 那个服务啦!

不过,并不是所有的人都可以进行 at 工作排程喔!为什么?因为安全的理由啊~ 很多主机被所谓的绑架后,最常发现的就是他们的系统当中有很多的怪客程式 (cracker program) 被写入例行性命令的排程当中了,所以,那些可恶的程式就可能定时或不定时的在你的系统当中工作, 呵呵!所以啰,除非是您认可的帐号,否则先不要让他们使用 at 吧! 此外,我们可以利用 /etc/at.allow 与 /etc/at.deny 这两个档案来进行 at 的使用限制呢! 加上这两个档案后, at 的工作情况其实是这样的:
  1. 先找寻 /etc/at.allow 这个档案,写在这个档案中的使用者才能使用 at ,没有在这个档案中的使用者则不能使用 at ( 即使没有写在 at.deny 当中 );
  2. 如果没有 /etc/at.allow 就寻找 /etc/at.deny 这个档案,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 档案中的使用者,就可以使用 at 咯;
  3. 如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。
上面的情况说明了,其实我们只要有 at.deny 这个档案存在就好了,因为我们假设系统内的帐号都是懂得操作的使用者, 因此,预设让他们可以任意使用 at 这个好用的东西!这也是系统的预设值。我们的 FC4 预设也是只有 /etc/at.deny 存在,而且该档案内并未有任何帐号资料!这表示任何人均可使用 at 啦!不过,万一你不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。

crontab命令

例题:假若你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 发一封信给他,这封信的内容已经写在 /home/dmtsai/lover.txt 内了,该如何进行?
答:


     直接下达 crontab -e 之后,编辑成为:
      59 23 1 5 * mail kiki < /home/dmtsai/lover.txt
    那样的话,每年 kiki 都会收到你的这封信喔!(当然啰,信的内容就要每年变一变啦!)

01 * * * * root run-parts /etc/cron.hourly
五个数字后面接的是 root 喔!没错,与 crontab -e 的内容是不太一样的!这个栏位的 root 代表的是‘ 执行的使用者身份为 root ’当然啰,你 也可以将这一行改写成其他的身份哩!而 run-parts 代表后面接的 /etc/cron.hourly 是‘ 一个目录内(/etc/cron.hourly)的所有可执行档 ’,这也就是说,每个小时的 01 分,系统会以 root 的身份去 /etc/cron.hourly/ 这个目录下执行所有可以执行的档案!后面的三行也都是类似的意思!你可以到 /etc/ 底下去看看,系统本来就预设了这四个目录了!你可以将每天需要执行的命令直接写到 /etc/cron.daily/ 即可,还不需要使用到 crontab -e 的程式呢!方便吧

基本上, /etc/crontab 这个档案里面支援两种下达指令的方式,一种是直接下达指令, 一种则是以目录来规划,例如:
  • 指令型态
    01 * * * * dmtsai mail -s "testing" kiki < /home/dmtsai/test.txt
    以 dmtsai 这个使用者的身份,在每小时执行一次 mail 指令。
  • 目录规划
    */5 * * * * root run-parts /root/runcron
    建立一个 /root/runcron 的目录,将要每隔五分钟执行的‘可执行档’都写到该目录下, 就可以让系统每五分钟执行一次该目录下的所有可执行档。