您的位置:首页 > 运维架构 > Linux

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

2013-10-18 13:59 295 查看
功能:使用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 H D m d 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点之间每两个小时,早上部点

0 23-7/2,8* * * date

#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4* mon-wed date

#1月份日早上4点

0 4 1 jan* date

范例

lark:~>crontab-1 列出用户目前的crontab.

#MIN HOUR DAY MONTH DAYOFWEEK COMMAND

10 6* * * date

0*/2* * * date

0 23-7/2,8 * * * date

lark:~>

像大部分 Linux 使用者一样,您可能需要在某时候进行重性工作的排程。

这类工作可能频繁到几分钟一次,也可能一年只有一次。

这些工作可以使用 ``cron'' 工具完成。

cron 工具在 Linux 上的应用和和在其他 Unix 上所应用的非常相似。

然而, Red Hat 加上了一点和其他 Linux 发行版不同的工作排程方法 。

在其他的发行版,排程资讯位於系统的 ``crontab''档(位在 ``/etc/'' 目录),使用下面的格式 :

minute hour day month year command

您可以指定整数的时间要素 (例如 . 1 到 12 表示从一月到十二月),

或者用``*'' 符号作为万用字元指定一个或更多的要素

(例如 . * 在月的要素部分表示指令会在每月的特定日期及时间执行)。这里是

一些例子:

# Mail the system logs at 4:30pm every June 15th.

30 16 15 06 * for x 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 5 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 * 5 星期五每半小时,以及每月13号每半小时

command就是要执行的sh命令,可以是任意有效的shell命令,并且不应该加引号。cron 认为command一直是到这一行的末尾,它可以包含空格或制表符。

cron使用百分号(%)来表示command字段的换行。只有第一个百分号前的文本才会包含在实际命令中,其余行则作为该命令的标准输入。

例如:

echo The time is now `date` > /dev/console

write garth %Hi Garth % Remember to get a job.

cd /etc; /bin/mail -s "password file" evi < passwd

30 2 * * 1 (cd /users/joe/project; make)

20 1 * * * 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 d -mtime +3 -exec /bin/rm -rf { } ';'

递归删除/tmp下的72小时未修改的所有子目录。

/tmp下的普通文件会在系统启动时被系统启动脚本删除,但有些系统不会删除目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: