linux下利用crontab命令使用
jopen
13年前
crontab是个非常方便的在unix/linux系统上定时(循环)执行某个任务的程式 <br /> 使用cron服务,用 service crond status 查看 cron服务状态,如果没有启动则 service crond start启动他, <br /> cron服务是个定时执行的服务,能通过crontab 命令添加或编辑需要定时执行的任务: <br /> crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 <br /> crontab -l //列出某个用户cron服务的周详内容 <br /> crontab -r //删除没个用户的cron服务 <br /> crontab -e //编辑某个用户的cron服务 <br /> 比如说root查看自己的cron设置:crontab -u root -l <br /> 再例如,root想删除fred的cron设置:crontab -u fred -r <br /> 在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e <br /> 进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt <br /> <b>编辑/etc/crontab文件,在末尾加上一行: 30 5 * * * root init 6 这样就将系统设置为了每天早上5点30自动重新启动。</b> <br /> <b>需要将crond设置为系统启动后自动启动的服务,能在/etc/rc.d/rc.local 中,在末尾加上</b> <br /> <b>service crond start</b> <br /> 如果还需要在系统启动十加载其他服务,能继续加上其他服务的启动命令。 <br /> 比如: service mysqld start <br /> 基本用法: <br /> 1. crontab -l <br /> 列出当前的crontab任务 <br /> 2. crontab -d <br /> 删除当前的crontab任务 <br /> 3. crontab -e (solaris5.8上面是 crontab -r) <br /> 编辑一个crontab任务,ctrl_D结束 <br /> 4. crontab filename <br /> 以filename做为crontab的任务列表文件并载入 <br /> crontab file的格式: <br /> crontab 文件中的行由 6 个字段组成,不同字段间用空格或 tab 键分隔。前 5 个字段指定命令要运行的时间 <br /> 分钟 (0-59) <br /> 小时 (0-23) <br /> 日期 (1-31) <br /> 月份 (1-12) <br /> 星期几(0-6,其中 0 代表星期日) <br /> 第 6 个字段是个要在适当时间执行的字符串 <br /> 例子: <br /> #MIN HOUR DAY MONTH DAYOFWEEK COMMAND <br /> #每天早上6点10分 <br /> 10 6 * * * date <br /> #每两个小时 <br /> 0 */2 * * * date (solaris 5.8似乎不支持此种写法) <br /> #晚上11点到早上8点之间每两个小时,早上8点 <br /> 0 23-7/2,8 * * * date <br /> #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 <br /> 0 11 4 * mon-wed date <br /> #1月份日早上4点 <br /> 0 4 1 jan * date <br /> 补充:在使用crontab的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程式中自行设置环境变量(export) <br /> (1)先建一个文件crond.txt如下, 每天早上5点36分重新启动 <br /> 36 5 * * * reboot <br /> (2)上传到/opt目录 <br /> (3)运行命令 <br /> crontab /opt/crond.txt <br /> crontab -l <br /> <b>让设置文件生效:</b>如果让设置文件生效,还得重新启动cron,切记,既然每个用户下的cron设置文件修改后。也要重新启动cron服务器。 <br /> <b>在Fedora 和Redhat中,我们应该用;</b> <br /> [root@localhost ~]# /etc/init.d/crond restart <br /> 如果让crond 在开机时运行,应该改动其运行级别; <br /> [root@localhost ~]# chkconfig --levels 35 crond on <br /> service crond status 查看 cron服务状态,如果没有启动则 service crond start启动他, cron服务是个定时执行的服务,能通过crontab 命令添加或编辑需要定时执行的任务 <br /> Crontab文件的每一行由六个域(minutes、hours、day of month、month、day of week、 command)组 成,域之间用空格或Tab分开,其中: <br /> minutes: 分钟域,值的范围是0到59 <br /> hours: 小时域,值的范围是0到23 <br /> day of month: 日期,值的范围是1到31 <br /> month: 月份,值的范围是1到12 <br /> day of week: 星期,值的范围是0到6,星期日值为0 <br /> command: 所要运行的命令 <br /> 如果一个域是*,表明命令能在该域所有可能的取值范围内执行。 <br /> 如果一个域是由连字符隔开的两个数字,表明命令能在两个数字之间的范围内执行(包括两个数字 本身)。 <br /> 如果一个域是由逗号隔开的一系列值组成的,表明命令能在这些值组成的范围内执行。 <br /> 如果日期域和星期域都有值,则这两个域都有效。 <br /> 编写一个文件,用以启动自动备份进程。 <br /> cd /opt <br /> touch reboot.txt <br /> 在reboot.txt中添加一下内容: <br /> 0 4 * * * reboot <br /> crontab /opt/reboot.txt <br /> 用crontab -e编辑定时操作,例如加入下行命令: <br /> 用crontab -l命令来查看 <br /> 注意:需要启动服务(添加在rc.local中) <br /> 2,重启crond任务 <br /> /etc/init.d/cron restart (ubuntu下) <br /> <b>第一种 在Fedora或Redhat 等以RPM包管理的系统中;<br /> </b> <br /> [root@localhost ~]# /etc/init.d/crond start <br /> [root@localhost ~]# /etc/init.d/crond stop <br /> [root@localhost ~]# /etc/init.d/crond restart <br /> /etc/rc.d/init.d/crond restart <br /> <br /> <span style="color:#111111;"><br /> </span> <br /> <span style="color:#111111;"><br /> </span> <br /> <span style="color:#111111;"><br /> </span> <br /> <span style="color:#111111;">命令简介 <br /> </span> <br /> <span style="color:#111111;">crontab-操作每个用户的守护程式和该执行的时间表。 <br /> 部分参数说明 <br /> crontab file [-u user]-用指定的文件替代目前的crontab。 <br /> crontab-[-u user]-用标准输入替代目前的crontab. <br /> crontab-1[user]-列出用户目前的crontab. <br /> crontab-e[user]-编辑用户目前的crontab. <br /> crontab-d[user]-删除用户目前的crontab. <br /> crontab-c dir- 指定crontab的目录。 <br /> crontab文件的格式:M H D m d cmd. <br /> M: 分钟(0-59)。 <br /> H:小时(0-23)。 <br /> D:天(1-31)。 <br /> m: 月(1-12)。 <br /> d: 一星期内的天(0~6,0为星期天)。 <br /> cmd要运行的程式,程式被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量。 <br /> 下面是个例子文件: <br /> #MIN HOUR DAY MONTH DAYOFWEEK COMMAND <br /> #每天早上6点 <br /> 106* * * date <br /> #每两个小时 <br /> 0*/2* * * date <br /> #晚上11点到早上8点之间每两个小时,早上部点 <br /> 0 23-7/2,8* * * date <br /> #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 <br /> 0 11 4* mon-wed date <br /> #1月份日早上4点 <br /> 0 4 1 jan* date <br /> 范例 <br /> lark:~>crontab-1 列出用户目前的crontab. <br /> #MIN HOUR DAY MONTH DAYOFWEEK COMMAND <br /> 10 6* * * date <br /> 0*/2* * * date <br /> 0 23-7/2,8 * * * date <br /> lark:~><br /> <br /> <br /> </span> <strong>名称</strong> : crontab <br /> <strong>使用权限</strong> : root用户和crontab文件的所有者 <br /> <strong>语法</strong> : <br /> crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ] <br /> <strong>说明</strong> : <br /> crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。 <br /> <strong>参数</strong> : <br /> -e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) <br /> -r [UserName]: 删除目前的时程表 <br /> -l [UserName]: 列出目前的时程表 <br /> -v [UserName]:列出用户cron作业的状态 <p><strong>时程表的格式如下</strong> :<br /> f1 f2 f3 f4 f5 program<br /> 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。<br /> 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推<br /> 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推<br /> 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推<br /> 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推<br /> 使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。<br /> 由于unix版本不一样,所以部分语法有差别,例如在hp unix aix 中设定间隔执行如果采用*/n 方式将出现语法错误,在这类unix中 ,间隔执行只能以列举方式,详请见例子。<br /> <br /> <strong>使用方法</strong>:<br /> 用VI编辑一个文件 cronfile,然后在这个文件中输入格式良好的时程表。编辑完成后,保存并退出。<br /> 在命令行输入<br /> $: crontab cronfile<br /> 这样就将cronfile文件提交给c r o n进程,同时,新创建cronfile的一个副本已经被放在/ v a r / s p o o l / c r o n目录中,文件名就是用户名。<br /> <br /> <strong>例子</strong> :<br /> 每月每天每小时的第 0 分钟执行一次 /bin/ls :<br /> 0 * * * * /bin/ls<br /> 在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :<br /> */20 6-12 * 12 * /usr/bin/backup<br /> 周一到周五每天下午 5:00 寄一封信给 alex@domain.name :<br /> 0 17 * * 1-5 mail -s “hi” alex@domain.name < /tmp/maildata<br /> 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”<br /> 20 0-23/2 * * * echo “haha”<br /> 晚上11点到早上8点之间每两个小时,早上8点<br /> 0 23-7/2,8 * * * date<br /> 在hp unix,中,每20分钟执行一次,表示为:0,20,40 * * * * 而不能采用*/n方式,否则出现语法错误<br /> <br /> <strong>注意</strong> :</p> <p>当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。</p> <p><span style="color:#ff0000;">15分钟同步服务器的时间</span></p> <p>*/15 * * * * root /usr/sbin/timesync.sh</p> <p>注意,<span style="color:#ff0000;">timesync.sh要有执行权限,即chmod 777 timesync.sh</span></p> <p><br /> timesync.sh脚本的写法:</p> <p></p> <div> <div> Php代码 </div> </div> <ol> <li><span><span>#!/bin/bash </span></span></li> <li><span><span>echo</span><span> “Sync start…” >> /</span><span>var</span><span>/log/timesync.log </span></span></li> <li><span>/bin/<span>date</span><span> >> /</span><span>var</span><span>/log/timesync.log </span></span></li> <li><span># using time.windows.com </span></li> <li><span>/usr/sbin/ntpdate time.windows.com </span></li> <li><span># synchronize hardware clock </span></li> <li><span>/usr/sbin/hwclock –systohc </span></li> <li><span>/bin/<span>date</span><span> >> /</span><span>var</span><span>/log/timesync.log </span></span></li> <li><span><span>echo</span><span> “Sync </span><span>End</span><span>.” >> /</span><span>var</span><span>/log/timesync.log </span></span><a href="/misc/goto?guid=4959499818500970474" target="_blank"></a></li> </ol> 原文地址: <a href="/misc/goto?guid=4959499818500970474" target="_blank">http://cjl20082002.blog.163.com/blog/static/1208273320111219181729/</a>