鸟哥的Linux私房菜-例行性工作排程

《鸟哥的Linux私房菜》第十六章-例行性工作排程,阅读笔记。

简介

  • 一次性任务:at,使用的是 atd 这个服务
  • 多次性任务:crontab,使用的是 crond 这个服务,可循环的时间分为分钟,小时,每周,每月,每年(为啥没精确到秒呢?)

Linux 系统一般都有些默认的例行任务,比如:登录档轮替(log rotate)、登录档分析(logwatch)等。

at 的使用

入门级命令:

  1. 启动:/etc/init.d/atd start
  2. 设置开机自启:chkconfig atd on
  • 原理:at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at 目录内以供 atd 服务的读取和运行。
  • 权限设置:限制某些用户不能使用 at 命令。权限设置文件有:/etc/at.allow, /etc/at.deny, 它们的工作方式:
    1. 先寻找 /etc/at.allow, 只有该文件登记的用户可以使用 at 命令
    2. 若没有找到 /etc/at.allow, 则寻找 /etc/at.deny, 没有在该文件登录的用户都可以使用 at 命令
    3. 若也没有找到 /etc/at.deny, 则只有 root 可以使用 at 命令

具体的 at 命令

命令语法:

1
2
3
4
5
6
7
8
9
10
at [-mldv] TIME
at -c 工作号码
选项和参数:
-m: 当 at 的工作完成后,即使没有输出也发一封邮件通知使用者工作已完成
-l: at -l 相当于 atq,列出当前用户的所有 at 排程
-d: at -d 相当于 atrm,删除一个 at 排程
-v: 使用较明显的时间格式列出 at 排程中的工作列表
-c: 列出后面接的该项工作的实际命令内容
TIME:时间格式,如:HH:MM YYYY-MM-DD 04:00 2009-03-17

小例子:

1
2
3
at now + 5 minutes
at> /bin/mail root -s "testing at job" < /root/.bashrc
at> <EOT> // 即 ctrl+d 表示输入结束

正如上面所说,还有两个额外命令:

  1. atq,查询排程
  2. atrm [job-num],删除某个排程

系统清闲时再执行的排程

即是使用 batch 命令了,用法跟 at 命令一样滴!只有在 CPU 工作负载小于 0.8 时才执行,除此之外查询、删除啥的都是跟 at 一样的,也就是说它就是 at 一特殊别名吧!

关于 cron

cron 的权限设置跟 at 是一样滴:/etc/cron.allow 和 /etc/cron.deny
crontab 语法:

1
2
3
4
5
6
crontab [-u username] [-elr]
选项和参数:
-u: 只有 root 才能进行这个任务,即帮其他用户创建 cron 排程
-e: 编辑 crontab 的工作内容(vim 语法,每一行就是一个任务)
-l: 查询 crontab 的工作内容
-r: 清除所有的 crontab 的工作内容

小例子:

1
59 23 1 5 * mail kiki < /home/dmtsai/lover.txt

复杂的时间语法:
时间语法

如果关机了,定时任务怎么办?

很明显,如果关机了定时任务就执行不了了。。。所以有一个基于 cron 的关机使用版本(就是下次开机时还是会执行的) anacron,现在用的不多,也不废话了,用到了直接看这里吧!