cron

#cd /etc
#vi test //新建crond任务,每行一个任务
01 * * * * root wall hello
#crontab test //提交test文件给crond守护进程执行。
#crontab -l //显示当前的任务
#service crond restart
#chkconfig crond on


相关知识点:
-------------------------------------------------------------------------------------------------------------
1.cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

2.你也可以将这个服务在系统启动的时候自动启动:
在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/service crond start
现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:

3.直接用crontab命令编辑
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务


比如说root查看自己的cron设置:crontab -u root -l


再例如,root想删除fred的cron设置:crontab -u fred -r


在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e


进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt


这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:


分钟 (0-59)


小時 (0-23)


日期 (1-31)


月份 (1-12)


星期 (0-6)//0代表星期天


除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题:


每天早上6点


0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。


每两分钟




1-59/2 * * * * echo "Have a break now." >> /tmp/test.txt


每两个小时


0 */2 * * * echo "Have a break now." >> /tmp/test.txt


晚上11点到早上8点之间每两个小时,早上八点


0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt


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


0 11 4 * 1-3 command line


1月1日早上4点


0 4 1 1 * command line


每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。


2.编辑/etc/crontab 文件配置cron


cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:


SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号

HOME=/ //使用者运行的路径,这里是根目录

# run-parts

01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本

02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本

22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本

42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本


大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。



-----------------------------------------------------------------------------------------------------
cron的相关配置文件:

/etc/crontab 记录环境变量(SHELL,PATH,MAILTO,HOME)和系统预先制定的cron任务(cron.hourly/daily/weekly/monthly). 当cron任务无法执行时, 可以检查一下这里的环境变量和命令路径.
/etc/cron.deny 被记录在此的用户不能提交cron任务,每行一个用户名.
/etc/cron.allow 被记录在此的用户可以提交cron任务. 这两个文件不存在时, 只有root有提交cron任务的权限.
/etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /cron.monthly/ 存放系统预先制定的cron任务.
/var/spool/cron/ 所有用户的cron任务, 与用户名相对应.
/var/log/cron cron的日志信息.
cron的配置文件称为crontab, 是"cron table"的简写. cron在三个地方查找crontab文件: /etc/crontab, /etc/c

ron.d/, /var/spool/cron.

crontab文件的格式:

minute hour day month weekday [username] command
minute 分钟 0-59
hour 小时 0-23
day 日期 1-31
month 月份 1-12
weekday 星期几 0-6(0代表星期天)
这些和时间相关的字段由空格分隔, 每个字段必须指定一个值:
*(星号), 意味着所有的允许值;
一个整数, 精确匹配;
两个被破折号分开的整数, 表示范围;
多个被逗号分开的整数或范围, 表示匹配列出的这些值;
/n 表示步长, 范围/n

其中"天"由day和weekday确定, 都匹配;
其中: 星号可以匹配所有字符; 一个整数必须精确匹配; 用短划线隔开的两个整数, 他们匹配的是值的范围;
用逗号隔开的整数或者范围, 匹配任何被列到的值.
例如:
45 10 * * 1-5 上午10:45从周一到周五
不要把星号放在第一个字段, 除非你想这个命令每分钟都执行.
weekday与day若同时指定, 则满足二者之一即被执行.
例如:
0,30 * 13 * 5 星期五每半小时, 以及每月13号每半小时
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 [-u user] [-l|-r|-e]
-l 列出用户的cron任务
-r 删除cron任务
-e 编辑cron任务
-i 删除前提示
注: 不带参数的crontab命令将试图从标准输入读取crontab的内容. 在这个模式下, 如用Control-D来退出的话, 会删除整个crontab内容. 应使用Control-C来退出.
crontab [-u user] filename 从文件导入crontab任务.
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

管理crontab:

crontab filename 将filename安装为crontab文件, 它将替代crontab文件以前版本.
crontab -e 检出一个crontab的一个副本, 用编辑器打开, 然后将其重新提交给crontab目录(/var/spool/cron/'username').
crontab -l 将crontab中内容列在标准输出上.
crontab -r 删除crontab.
不带命令行的crontab将试图从他自己的标准输出中读取crontab内容. 如果意外进入, 不要试图使用Ctrl-D退出, 那样会删除整个crontab内容, 而要使用Ctrl-C退出.
对于root, 有这样的命令: crontab -u loki -r 删除属于loki的crontab文件.

控制使用 crontab 命令:

/etc/cron.allow, /etc/cron.deny文件控制哪一个用户可

以使用 crontab 命令. root 用户可以创建, 编辑或删除这些文件. 这些文件的条目是用户登录名称, 每个名称占一行. 如果登录标识和多个的登录名称相关联, 这个crontab 命令采用第一个在 /etc/passwd 文件中的登录名称, 而不管当前实际使用哪一个登录名称. 而且, 要允许用户启动 cron 作业, 应该使用 chuser 命令将 /etc/security/user 文件中的守护进程属性设置为 TRUE.
以下关于 cron.allow 文件的一个示例:
root
nick
dee
sarah
如果 cron.allow 文件存在, 只有在文件中出现其登录名称的用户可以使用 crontab 命令. root 用户的登录名必须出现在 cron.allow 文件中, 如果这个文件存在的话. 系统管理员可以明确的停止一个用户, 通过使用 crontab 命令, 同时在cron.deny 文件中列出用户的登录名. 如果只有 cron.deny 文件存在, 任一名称没有出现在这个文件中的用户可以使用 crontab 命令.
如果以下一个条件成立, 用户将不能使用 crontab 命令:
cron.allow 文件和 cron.deny 文件不存在(只允许 root 用户).
cron.allow 文件存在, 但用户的登录名并不列在其中.
cron.deny 文件存在, 并且用户的登录名列在其中.
默认情况下, 所有用户都可向cron提交crontab文件. 其默认的用户配置文件是空的/etc/cron.deny文件. 如果没有这两个文件的话, 只有root才能提交crontab.
重要的是, 访问控制是由crontab而不是cron来实现的. 如果某用户可通过其他方式把crontab秘密转移到适合目录中去, 那么cron就会盲目地执行该文件中的命令.
Linux预安装好的crontab项主要在/etc/cron.d下, 如果想使某项不起作用, 可以注释掉.
另外, 还有/etc/cron.daily 每天运行一次的脚本; /etc/weekly 每周运行一次的脚本.

crond的管理:

service crond {start|stop|status|reload|restart|condrestart}
/etc/init.d/crond {start|stop|status|reload|restart|condrestart}

常见用途:

清理文件系统:
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下的普通文件会在系统启动时被系统启动脚本删除, 但有些系统不会删除目录.

--End--
----------------------------------------------------------------------------------------------









相关文档
最新文档