linux的计划任务是系统管理方面的一个重要内容,正因为有了计划任务,我们才可以完全实现系统管理的脚本化和自动化。
下面请允许我讲两个关于计划任务的命令。一个是
at,另一个是
crontab.
1.at
如果你的计划任务只要执行一次,那么就请你使用at。在默认情况下,我们的linux系统是开启了atd这个服务的。如果不确认你的linux是否开启了atd这个服务,请使用下面这个命令查看。
[root@localhost cron.daily]# /etc/init.d/atd statusatd (pid 3016) 正在运行...
从上面可以看出鄙人的atd服务时启动的。
/etc/init.d/atd start 可以启动你的atd服务。
- /etc/at.allow 这个档案,写在这个档案中的使用者才能使用 at
,没有在这个档案中的使用者则不能使用 at ( 即使没有写在 at.deny 当中
);
-
如果没有 /etc/at.allow 就寻找 /etc/at.deny 这个档案,若写在这个
at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 档案中的使用者,就可以使用
at 咯;
-
如果两个档案都不存在,那么只有 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,这表明后面是一条指令而不是包含指令的目录。如需执行多条指令,指令之间用空格符号分开即可。。
阅读(1934) | 评论(0) | 转发(0) |