Linux中的crontab命令安排自动运行的进程任务

功能:使用crontab命令装载cron进程所需要的crontab文件。
格式:
格式1:crontab [-u user] [-l|-r|-e]
格式2:crontab [-u user] filename
其中:
-u user:修改指定用户的crontab文件。如果不指定该选项,
  crontab将默认为是操作者本人的crontab。
-l:在标准输出上显示当前的crontab任务。
-r:删除当前的crontab任务。
-e:使用环境变量指定的编辑器编辑crontab文件。
 当结束编辑离开时,编辑后的文件将自动安装。

filename:是一个crontab文件的来源文件

crontab文件的来源文件存在的形式
一个符合语法规则的纯文本文件,使用第2种格式的crontab命令装载
使用第2种格式的crontab命令时,它是一个文本编辑器(如vi)的临时文件,
编辑结束自动装载

crontab文件的来源文件的格式
每一行格式为:
minute hour day-of-month month-of-year day-of-week [username] commands 

其中:
minute:一小时中的哪一分钟(0~59)
hour:一天中的哪个小时(0~23)
day-of-month:一月中的哪一天(1~31)
month-of-year:一年中的哪一月(1~12)
day-of-week:一周中的哪一天(0~6)
username:以指定的用户身份执行commands
commands:执行的命令(可以是多行命令或者是脚本调用)

五个时间字段的语法说明
不能为空,可以使用统配符*表示任何时间。
可以指定多个值,它们之间用逗号间隔。例如:1,3,7。
可以指定时间段,用减号间隔。例如:0-6。
可以用/n表示步长。例如:8-18/2表示时间序列8,10,12,14,16,18
这是我刚刚学习到的新知识,拿来和大家分享

部分参数说明 
crontab file [-u user]-用指定的文件替代目前的crontab。 
crontab -[-u user]-用标准输入替代目前的crontab. 
crontab -l [user]-列出用户目前的crontab.  (例如:crontab -l mot_rep)
crontab-e[user]-编辑用户目前的crontab. 
crontab-d[user]-删除用户目前的crontab. 
crontab-c dir- 指定crontab的目录。 
crontab文件的格式:M cmd. 
M: 分钟(0-59)。 
H:小时(0-23)。 
D:天(1-31)。 
m: 月(1-12)。 
d: 一星期内的天(0~6,^&';R&vBq育络a#QB.Q!提!|&U教网!W0为星期天)。 
cmd要运行的程序,程序被送入sh执行,
这个shell只有USER,HOME,SHELL这三个环境变量。 

下面是一个例子文件: 
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND 
#每天早上6点 
106* date 

#每两个小时 
0*/2* date 

#晚上11点到早上8点之间每两个小时,早上部点 
23-7/2,8* date 

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 
11 4* mon-wed date 

#1月份日早上4点 
jan* date 
范例 
lark:~>crontab-1 列出用户目前的crontab. 
#MIN HOUR DAY MONTH DAYOFWEEK COMMAND 
10 6* date 
0*/2* date 
23-7/2,8 date 
lark:~> 
 
像大部分 Linux 使用者一样,您可能需要在某时候进行重性工作的排程。
这类工作可能频繁到几分钟一次,也可能一年只有一次。
这些工作可以使用 ``cron'' 工具完成。  
cron 工具在 Linux 上的应用和和在其他 Unix 上所应用的非常相似。
然而, Red Hat 加上了一点和其他 Linux 发行版不同的工作排程方法 
在其他的发行版,排程资讯位於系统的 ``crontab''档(位在 ``/etc/'' 目录),使用下面的格式  
  minute hour day month year command 

您可以指定整数的时间要素 (例如 到 12 表示从一月到十二月),
或者用``*'' 符号作为万用字元指定一个或更多的要素
(例如 在月的要素部分表示指令会在每月的特定日期及时间执行)。这里是 
一些例子:  
  Mail the system logs at 4:30pm every June 15th. 
30 16 15 06 for in /var/log/*; do cat ${x} mail postmaster; done 

Inform the administrator, at midnight, of the changing seasons. 
00 00 20 04 echo 'Woohoo, spring is here!' 
00 00 20 06 echo 'Yeah, summer has arrived, time to hit the beach!' 
00 00 20 10 echo 'Fall has arrived.  Get those jackets out.  :-(' 
00 00 20 12 echo 'Time for months of misery.  ;-(' 
  
注意该指令会输出到一个标准出口 (亦即. 一个终端机 ),像是上面使用 ``echo'' 的例子会将输出寄 
给 ``root'' 帐号。如果您想要避免它,只要像下面将输出导引到一个空的设备  
  00 06 echo 'I bug the system administrator daily at 6:00am!' >/dev/null 
  
在多出的标准 ``crontab'' 项目, Red Hat 加上了一些目录  
/etc/cron.hourly/ 
/etc/cron.daily/ 
/etc/cron.weekly/

crontab -e 重新编辑定时执行程序
 
crontab文件格式:
minute   hour    day      month     weekday    [username]    command
(0~59)  (0~23)  (1~31)    (1~12)     (0~6)
其中:星号可以匹配所有字符;一个整数必须精确匹配;用短划线隔开的两个整数,他们匹配的是值的范围;一系列用逗号隔开的整数或者范围,匹配任何被列到的值。
例如:  45 10     1-5          上午10:45从周一到周五
不要把星号放在第一个字段,除非你想这个命令每分钟都执行。
weekday与day若同时指定,则满足二者之一即被执行。
例如:0,30    13                星期五每半小时,以及每月13号每半小时
 
command就是要执行的sh命令,可以是任意有效的shell命令,并且不应该加引号。cron 认为command一直是到这一行的末尾,它可以包含空格或制表符。
cron使用百分号(%)来表示command字段的换行。只有第一个百分号前的文本才会包含在实际命令中,其余行则作为该命令的标准输入。
例如:
echo  The time is now `date` /dev/console
write garth %Hi Garth Remember to get job.
cd /etc; /bin/mail  -s "password file" evi passwd
 
30           (cd /users/joe/project; make)
 
20         find  /tmp  -atime  +3  -exec  rm -f ';'
每天凌晨1:20删除/tmp目录中的3天内未被访问的所有文件
55  23     0-3,6    /staff/trent/bin/acct-script
除了星期四、五外每天23:55 运行acct-script
 
管理crontab
crontab  filename  将filename安装为crontab文件,它将替代crontab文件以前版本。
crontab -e     检出一个crontab的一个副本,用编辑器打开,
然后将其重新提交给crontab目录(/var/spool/cron)。
crontab  -l      将crontab中内容列在标准输出上。
crontab -r       删除crontab。
不带命令行的crontab将试图从他自己的标准输出中读取crontab内容。如果意外进入,不要试图使用Ctrl-D退出,那样会删除整个crontab内容,而要使用Ctrl-C退出。
对于root,有这样的命令:crontab -u loki  -r   删除属于loki的crontab文件。
默认情况下,所有用户都可向cron提交crontab文件。
其默认的用户配置文件是: /etc cron.allow   /etc  cron.deny  
如果没有这两个文件的话,只有root才能提交crontab。
重要的是,访问控制是由crontab而不是cron来实现的。
如果某用户可通过其他方式把crontab秘密转移到适合目录中去,
那么cron就会盲目地执行该文件中的命令。
Linux预安装好的crontab项主要在/etc/cron.d下,
如果想使某项不起作用,可以注释掉。
另外,还有/etc/cron.daily 每天运行一次的脚本;   
/etc/weekly  每周运行一次的脚本。
常见用途:
清理文件系统
find   -xdev  -name  core -atime  +7  -exec  rm -f ';'
删除一星期都没访问过的core映象文件(程序崩溃时产生的映象文件)。
find   -xdev  -atime  +3  '('  -name  '#*'  -o  -name  '#*'  -o -name  '*.CKP'  -o  -name  '*~'  -o  -name  '.nfs~'  ')'  -exec   rm -f ';'
删除以 #,.#或nfs开头的,或者是以 以及.CKP结尾的文件,还有3天未被访问的文件,不同类型的临时文件和编辑器的备份文件,都是这一模式的典型代表。
cd  /tmp  find    -name     -name  lost+found  -type  -mtime  +3  -exec /bin/rm  -rf  ';'
递归删除/tmp下的72小时未修改的所有子目录。
/tmp下的普通文件会在系统启动时被系统启动脚本删除,但有些系统不会删除目录。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值