Chinaunix首页 | 论坛 | 博客
  • 博客访问: 231026
  • 博文数量: 68
  • 博客积分: 40
  • 博客等级: 民兵
  • 技术积分: 355
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-25 11:49
文章分类
文章存档

2014年(2)

2012年(66)

分类:

2012-02-21 13:44:32

原文地址:Linux 计划任务 作者:Linux菜鸟上路

  linux的计划任务是系统管理方面的一个重要内容,正因为有了计划任务,我们才可以完全实现系统管理的脚本化和自动化。
   下面请允许我讲两个关于计划任务的命令。一个是at,另一个是crontab.
 
1.at

 如果你的计划任务只要执行一次,那么就请你使用at。在默认情况下,我们的linux系统是开启了atd这个服务的。如果不确认你的linux是否开启了atd这个服务,请使用下面这个命令查看。
[root@localhost cron.daily]# /etc/init.d/atd status
atd (pid  3016) 正在运行...
 从上面可以看出鄙人的atd服务时启动的。/etc/init.d/atd start 可以启动你的atd服务。
  1. /etc/at.allow 这个档案,写在这个档案中的使用者才能使用 at ,没有在这个档案中的使用者则不能使用 at ( 即使没有写在 at.deny 当中  );
  2. 如果没有 /etc/at.allow 就寻找 /etc/at.deny 这个档案,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 档案中的使用者,就可以使用 at 咯;
  3. 如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。
  • Linux 预设情况下,只有 /etc/at.deny 这个档案,且这个档案的内容为空白的,由于内容没有任何使用者,所以当然『所有人都可以使用 at 』
  • 如果不想要某个使用者使用 at 时,那么将该使用者账号写到 /etc/at.deny 这个档案中即可。

 那么如何增加一个计划任务呢?我们还是先简单认识一下at的命令吧

 at [-m]  TIME   ;下达计划任务
 atq         ;     查看计划任务
 atrm         ;    删除计划任务

-m    :执行 at 计划任务时,将屏幕输出结果 mail 给下达指令的使用者
TIME的格式具体请参照我下面的列子吧。
 [root@localhost cron.daily]# at 04:00 2011-09-20  #在2011年9月20号上午四点执行命令。
at> who >>/test/test      
at>                                                   #按ctrl+D结束
job 6 at 2011-09-20 04:00
[root@localhostcron.daily]#  at 11pm                                                          #今天晚上11点执行,如果已经过了,等到                                                            明天晚上  
at> pwd >>/test/test
at>
job 7 at 2011-09-05 23:00
[root@localhost cron.daily]#  at 08am + 3 weeks  #三周后的上午八点执行。
at> who
at>
job 8 at 2011-09-26 08:00

下面我们来查看一下root用户的计划任务。
[root@localhost cron.daily]# atq
7       2011-09-05 23:00 a root
8       2011-09-26 08:00 a root
6       2011-09-20 04:00 a root
删除计划任务
[root@localhost cron.daily]# atrm 7 8 6
[root@localhost cron.daily]# atq   
[root@localhost cron.daily]#  
#已无计划任务

2 .cron
 
  cron是周期性执行的计划任务。要执行这个计划任务,首先得看我们的crond服务启动木有。
[root@localhost cron.daily]# /etc/init.d/crond status
crond (pid  2966) 正在运行...
要启动crond 服务,请用/etc/init.d/crond start命令。

crontab的主要命令:
  crontab [-u user]   [-l | -e | -r]

  -u  :只有root用户才有这个权限
  -l  :列出crontab的内容
  -e   :编辑crontab的内容
  -r   :删除crontab的内容


下面请看一个例子:
[root@localhost cron.daily]# crontab -e
00 04 12 09 *  who >> /test/test
"/tmp/crontab.XXXXFxmC2P" 2L, 34C

可能有人有疑问了,00 04 12 09 *  who >> /test/test  解释一下:每年的9月12号凌晨4点执行这条who命令并将输出结果保存在/test/test这个文件中。

数字代表的意义 分钟 小时 日期 月份
范围 0-59 0-23 1-31 1-12 0-6 (0为星期天)
另外,如果是*的时候,代表所有数字都适用的意思。
 
例如:如果我们想每天早上四点发一封邮件给root 我们就可以执行crontab -e 后输入下面的内容
  00 04 * * * mail root < /test/test
 如果你对某女有意思,为了表达你对她的爱意,你可以每隔五分钟发一封求爱信给她,如下面主要这样
 */5 * * * * mail 276243865@qq.com < /test/lovemail

下面演示其他的命令。
[root@localhost cron.daily]# crontab -l
00 04 25 09 *  who >> /test/test
[root@localhost cron.daily]# crontab -r
[root@localhost cron.daily]# crontab -l
no crontab for root

其实当你下达一个crontab -e 命令时,系统会自动建立一个/var/spool/cron/$user 文件。
[root@localhost cron.daily]# crontab -e

00 04 * * * who
"/tmp/crontab.XXXXKw5gX6" 2L, 17C written
crontab: installing new crontab
[root@localhost cron.daily]# vi /var/spool/cron/root
00 04 * * * who
"/var/spool/cron/root" 2L, 17C

下面直接编辑 /var/spool/cron/root 添加计划任务
[root@localhost cron.daily]# vi /var/spool/cron/root

00 04 * * * who
00 05 21 2 * pwd

"/var/spool/cron/root" 3L, 34C written
[root@localhost cron.daily]# crontab -l
00 04 * * * who
00 05 21 2 * pwd
[root@localhost cron.daily]# crontab -r;cat /var/spool/cron/root
no crontab for root
cat: /var/spool/cron/root: 没有那个文件或目录

注意:如果有多条计划任务使用crontab -r会删除所有的计划,如果你只想删除其中一条计划任务,请使用crontab -e 命令或者直接编辑/var/spool/cron/root文件。


下面我们看一下系统的cron设定。crontab -e是针对我们用户的,如果想看系统的计划任务,请看/etc/crontab这个文件的内容。
[root@localhost cron.daily]# vi /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

"/etc/crontab" 10L, 255C

MAILTO=root:是说,当 /etc/crontab 这个档案中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给谁?

01 * * * * root run-parts /etc/cron.hourly:在批注符号 #run-parts 这一行以后的命令,我们可以发现,五个数字后面接的是 root 喔!没错,这一行代表的是『执行的层级为 root 身份』当然啰,你也可以将这一行改写成其它的身份哩!而 run-parts 代表后面接的 /etc/cron.hourly 是一个目录内(/etc/cron.hourly)的所有可执行档,这也就是说,个小时的 01 分,系统会以 root 层级的使用者去 /etc/cron.hourly 这个目录下执行所有可以执行的档案!后面的三行也都是类似的意思!
 当然,如果你去掉run-parts,这表明后面是一条指令而不是包含指令的目录。如需执行多条指令,指令之间用空格符号分开即可。。






阅读(795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~