Linux定时任务-crontab

crontab使用方式 :

crontab -u [user]-设定某个用户的crontab服务,一般root用户在执行这个命令的时候需要此参数


crontab -1 [user]-列出用户目前的crontab.


crontab -e [user]-编辑用户目前的crontab.


crontab -d [user]-删除用户目前的crontab.


crontab文件的格式:M H D m d cmd.


M: 分钟(0-59)。


H:小时(0-23)。


D:天(1-31)。


m: 月(1-12)。


d: 一星期内的天(0~6,0为星期天)。


cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量


说明 :


crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定


user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设


定自己的时程表。


参数 :


crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)


crontab -r : 删除目前的时程表


crontab -l : 列出目前的时程表


时程表的格式如下 :


f1 f2 f3 f4 f5 program


其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。


当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推


当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推


当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推


当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推


使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。


例子 :


#每天早上7点执行一次 /bin/ls :


0 7 * * * /bin/ls


在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :


0 6-12/3 * 12 * /usr/bin/backup


周一到周五每天下午 5:00 寄一封信给 alex@domain.name :


0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata


每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"


20 0-23/2 * * * echo "haha"


注意 :


当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

 


例子2 :


#每天早上6点10分


10 6 * * * date


#每两个小时


0 */2 * * * date


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


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


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


0 11 4 * mon-wed date


#1月份日早上4点


0 4 1 jan * date


基本格式 :
*  *  *  *  *  command
分  时  日   月   周   命令


第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令


crontab文件的一些例子:


30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。


45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。


10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。


0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。


0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。


* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache


* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache


0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache


0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache


附:删除定时任务

crontab -e

把需要删除的定时任务命令去掉再保存即可。

删除后会有空白行,你可再通过sed命令把空白行删除掉。

sed -i '/^$/d' /var/spool/cron/root


附2:

其他相关命令

service crond start //启动服务

service crond stop //关闭服务

service crond restart //重启服务

service crond reload //重新载入配置

cat /var/log/cron //查看任务日志



Linux Crontab定时任务命令详解

08-13

一、Crontab 介绍rncrontab命令的功能是在一定的时间间隔调度一些命令的执行。rnrn1.1 /etc/crontab 文件rn在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。rn如:rn[root@dave ~]# cat /etc/crontabrnSHELL=/bin/bashrnPATH=/sbin:/bin:/usr/sbin:/usr/binrnMAILTO=rootrnHOME=/rn# run-partsrn01 * * * * root run-parts /etc/cron.hourlyrn02 4 * * * root run-parts /etc/cron.dailyrn22 4 * * 0 root run-parts /etc/cron.weeklyrn42 4 1 * * root run-parts /etc/cron.monthlyrnrn1.2 /etc/cron.deny 和 /etc/cron.allow 文件rn/etc/cron.deny 表示不能使用crontab 命令的用户rn/etc/cron.allow 表示能使用crontab的用户。rn如果两个文件同时存在,那么/etc/cron.allow 优先。rn如果两个文件都不存在,那么只有超级用户可以安排作业。rn每个用户都会生成一个自己的crontab 文件。这些文件在/var/spool/cron目录下:rn如:rn[root@dave ~]# cd /var/spool/cronrn[root@dave cron]# lsrnoracle rootrn我们直接查看这个文件,里面的内容和对应用户显示的crontab -l 一致。rn[root@dave cron]# cat oraclern00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1rn[root@dave cron]# cat rootrn0 12 * * * /root/bin/sync-clock.shrn[root@dave cron]#rnrn二、Crontab 使用说明rn2.1 Crontab语法rnusage: crontab [-u user] filerncrontab [-u user] [ -e | -l | -r ]rn(default operation is replace, per 1003.2)rn-e (edit user's crontab)rn-l (list user's crontab)rn-r (delete user's crontab)rn-i (prompt before deleting user's crontab)rn-s (selinux context)rn其中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。rnrn帮助:rn[root@dave ~]# man crontabrnCRONTAB(1) CRONTAB(1)rnNAMErncrontab - maintain crontab files for individual users (ISC Cron V4.1)rnSYNOPSISrncrontab [-u user] filerncrontab [-u user] [-l | -r | -e] [-i] [-s]rnDESCRIPTIONrnCrontab is the program used to install, deinstall or list the tables used to drive the cron(8) daemon in ISC Cron. Each user can have their own crontab, and though these are files in /var/spool/ , they are not intended to be edited directly. For SELinux in mls mode can be even more crontabs - for each range. For more see selinux(8)。rnIf the cron.allow file exists, then you must be listed therein in order to be allowed to use this command. If the cron.allow file does not exist but the cron.deny file does exist, then you must not be listed in the cron.deny file in order to use this command. If neither of these files exists, only the super user will be allowed to use this command.rnOPTIONSrn-u It specifies the name of the user whose crontab is to be tweaked. If this option is not given, crontab examines "your" crontab, i.e., the crontab of the person executing the command. Note that su(8) can confuse crontab and that if you are running inside of su(8) you should always use the -u option for safety?ˉs sake. The first form of this command is used to install a new crontab from some named file or standard input if the pseudo-filename "-" is given.rn-l The current crontab will be displayed on standard output.rn-r The current crontab will be be removed.rn-e This option is used to edit the current crontab using the editor specified by the VISUAL or EDITOR environment variables. After you exit from the edi-tor, the modified crontab will be installed automatically.rn-i This option modifies the -r option to prompt the user for a ?ˉy/Y?ˉ response before actually removing the crontab.rn-s It will append the current SELinux security context string as an MLS_LEVEL setting to the crontab file before editing / replacement occurs - see the documentation of MLS_LEVEL in crontab(5)。rnSEE ALSOrncrontab(5), cron(8)rnFILESrn/etc/cron.allowrn/etc/cron.denyrnSTANDARDSrnThe crontab command conforms to IEEE Std1003.2-1992 (????POSIX?ˉ?ˉ)。 This new command syntax differs from previous versions of Vixie Cron, as well as from the classicrnSVR3 syntax.rnDIAGNOSTICSrnA fairly informative usage message appears if you run it with a bad command line.rnAUTHORrnPaul Vixie rn4th Berkeley Distribution 16 Januar 2007 CRONTAB(1)rnrnrn2.2 Crontab 格式说明rn我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。rn添加的命令必须以如下格式:rn* * * * * /command pathrn前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。rn前5个字段分别表示:rn分钟:0-59rn小时:1-23rn日期:1-31rn月份:1-12rn星期:0-6(0表示周日)rn还可以用一些特殊符号:rn*: 表示任何时刻rn,: 表示分割rn-:表示一个段,如第二端里: 1-5,就表示1到5点rn/n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.rn一些示例:rn00 8,12,16 * * * /data/app/scripts/monitor/df.shrn30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.shrn10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.shrn10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.shrn10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.shrn43 21 * * * 21:43 执行rn15 05 * * *    05:15 执行rn0 17 * * * 17:00 执行rn0 17 * * 1 每周一的 17:00 执行rn0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行rn0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行rn0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行rn42 4 1 * *     毎月1日的 4:42分 执行rn0 21 * * 1-6   周一到周六 21:00 执行rn0,10,20,30,40,50 * * * * 每隔10分 执行rn*/10 * * * *        每隔10分 执行rn* 1 * * *         从1:0到1:59 每隔1分钟 执行rn0 1 * * *         1:00 执行rn0 */1 * * *        毎时0分 每隔1小时 执行rn0 * * * *         毎时0分 每隔1小时 执行rn2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行rn30 5 1,15 * *       1日 和 15日的 5:30 执行rnrnrn2.3 & 后台执行命令rn当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。rn如:rn30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &rn在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。rn不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:rn如:rncommand >out.file 2>&1 &rn在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。rnrn2.4 2>&1 含义rn先看一个例子:rn0 2 * * * /u01/test.sh >/dev/null 2>&1 &rn这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。rn在这里有有几个数字的意思:rn0表示键盘输入rn1表示标准输出rn2表示错误输出。rn我们也可以这样写:rn0 2 * * * /u01/test.sh >/u01/out.file & --这里没写,默认是1rn0 2 * * * /u01/test.sh 1>/u01/out.file &rn0 2 * * * /u01/test.sh 2>/u01/out.file &rn0 2 * * * /u01/test.sh 2>/u01/out.file 2>&1 &rn将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。rn2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file。rn&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。rn& :后台执行rn测试:rnls 2>1 : 不会报没有2文件的错误,但会输出一个空的文件1;rnls xxx 2>1: 没有xxx这个文件的错误输出到了1中;rnls xxx 2>&1: 不会生成1这个文件了,不过错误跑到标准输出了;rnls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1; 因为重定向符号>默认是1,这句就把错误输出和标准输出都传到out.txt 文件中。rnrn2.5 2>&1写在后面的原因rn格式:command > file 2>&1 == command 1> file 2>&1rn首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。rn如果改成: command 2>&1 >filern2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试