Crontab归结为以下几点特性:
A. Crontab约束
当用户名记录在文件
/usr/lib/cron/cron.allow时,该用户的crontab有效。当/usr/lib/cron /cron.allow 文件不存在时,用户名没被记录在/usr/lib/cron/cron.deny文件中,该用户的crontab也有效。当只存在/usr/lib /cron/cron.deny且为空时,所有的用户都可使用crontab。当前两个文件都不存在时,只有root用户可以使用crontab。 Deny或allow记录以每行一个用户名的形式记录信息。B. Crontab 命令
export EDITOR=vi为crontab文件指定一个编辑器crontab -e编辑该用户的crontab,当指定crontab 不存在时新建。crontab -l列出该用户的crontabcrontab -r删除该用户的crontabcrontab -u<用户名称>指定要设定crontab的用户名称crontab –v显示上一次编辑的时间(只在某些操作系统上可用)
C. Crontab 文件
Crontab语法一个crontab文件用五个段来定义:分,小时,天,月份和周日,和一个要定期执行的命令代码。
[text]
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
[/text]
所有的值都必须在相应的范围之内,否则视为无效。在填值区域内可以是
* 也可以是以 , 分隔的一组值。值可以是一个数据也可以是用连接符连起来的两个数(表示范围)。注:日期的格式可以是星期,也可以是一个月中的天。假如两个都有值,则在这两个时间都会执行。
D. Crontab 实例
下面是crontab文件中的一行,意思是在每天下午6:30中删除临时文件(临时文件存放在/home/someuser/tmp)。
[bash]
30 18 * * * rm /home/someuser/tmp/*
[/bash]
以下我们改变参数的值使其在不同的时间运行:如下表
| min | hour | day/month | month | day/week | Execution time |
|---|---|---|---|---|---|
| 30 | 0 | 1 | 1,6,12 | * | --00:30 on 1st of Jan,June & Dec |
| 0 | 20 | * | 10 | 1-5 | --8:00 PM every weekday(Mon-Fir) only in Oct |
| 0 | 0 | 1,10,15 | * | * | --midnight on 1st,10th & 15th of month |
| 5,10 | 0 | 10 | * | 1 | --At 12:05 12:10 every Monday & on 10th of every month |
注:要是无意间键入了没带参数的crontab 命令,别
Control-d 退出,这样会删掉所有的cronjob。 应该 Control -c 退出.在以上任何值中,星号
* 可以用来代表所有有效的值。譬如:月份值中的星号意味着在满足其它制约条件后每月都执行该命令。整数间的短线
- 指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。用逗号
, 隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。正斜线
/ 可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2 可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。开头为井号
# 的行是注释,不会被处理。E. Crontab 环境设置
Cron其实是在shell(/usr/bin/sh).后台引用用户程序的命令。
Cron默认的shell环境是:
[bash]
HOME=user's-home-directory
LOGNAME=user's-login-id
PATH=/usr/bin:/usr/sbin:
SHELL=/usr/bin/sh
[/bash]
用户希望自己的配置文件在表或者脚本的入口直接执行。
F. 禁用邮件默认的cronjobs在执行任务时会给用户发一封邮件。如果您不需要的话可以通过以下命令关闭。
>/dev/null 2>&1H. 生成日志文件保存cronjobs日志只需作如下设置就可以
[bash]
30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log
[/bash]
/home/someuser/cronlogs/clean_tmp_dir.log 为日志文件保存的绝对路径常用的crontab命令:
crontab -l显示所有现存cron job.crontab -r删除当前cron jobs.crontab -e编辑当前 crontab file.
编辑/etc/crontab 文件配置 cron
cron服务每分钟不仅要读一次/var/spool /cron内的所有文件,还需要读一次/etc/crontab,因此配置这个文件也能运用 cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
[bash]
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内的脚本
[/bash]
注意: run-parts,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。root 表示运行该命令的用户名。
看下面的内容:
cron 是一个可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。
cron 假定系统持续运行。如果当某任务被调度时系统不在运行,该任务就不会被执行。
要使用 cron 服务,必须安装了 vixie-cron RPM 软件包,而且必须在运行 crond 服务。要判定该软件包是否已安装,使用rpm -q vixie-cron命令。要判定该服务是否在运行,使用/sbin/service crond status命令。
cron 的主配置文件是 /etc/crontab,它包括下面几行:
[bash]
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
[/bash]
前四行是用来配置 cron 任务运行环境的变量。 SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell), PATH 变量定义用来执行命令的路径。cron 任务的输出被邮寄给 mailto 变量定义的用户名。如果 mailto 变量被定义为空白字符串 (mailto=" "),电子邮件就不会被寄出。HOME 变量可以用来设置在执行命令或脚本时使用的主目录。
/etc/crontab 文件中的每一行都代表一项任务。
如果某 cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到 /etc/cron.d 目录中。该目录中的所有文件使用和 /etc/crontab 中一样的语法。如下:
[bash]
#record the memory usage of the system every monday at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
#run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh
[/bash]
根用户以外的用户可以使用 crontab 工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 /var/spool/cron 目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL 或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab 所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。
cron 守护进程每分钟都检查 /etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。
/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程 (crond) 不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,根用户都总是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。/sbin/service crond start启动 cron 服务,推荐在引导时启动该服务/sbin/service crond stop停止 cron 服务
增加 cron 的工作
当决定要在系统上定期执行某个命令,必须将这个要执行的命令定义成一个 cron 工作,可以直接将要建立的 cron 工作定义在 cron TAB设置文件中,设置该命令执行的时机;或者也可以利用 cron 会定时执行 /etc/cron.*目录 scripts 的特性,将要执行的命令建立成为一个脚本文档,放置在该目录下,并且注意它的权限必须可以执行.
没有评论:
发表评论