`

linux crontab 使用详细说明 实例操作

阅读更多

名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
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,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 : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
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/3 6-12 * 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
范例
$crontab -l 列出用户目前的crontab.

------------------------------------------
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
这个是错的。
应该是0/3 6-12 * 12 * /usr/bin/backup
----------------------------------------
 Linux 任务计划之crontab命令

前几天,由于要备份ORACLE数据,学用了一下crontab命令,摘录在此以备忘。
相比用于安排一次性任务的at命令,crontab命令主要是用于安排一些周期性的任务,
比如 定期备份数据、定时杀毒、定期清理垃圾文件等。 Linux中的cron进程是一个主要的系统调度进程,
可以在后台自动完成用户指定的任务 计划。它每分钟检查一遍各个用户的“”任务计划书“”--也就是crontab文件,
如果计划书 中所指定的运行条件满足,就立即为用户执行计划书中的任务。那么,这个计划书放在哪儿 呢?
就放在/var/spool/cron/crontabs目录下面。这些计划书是什么样的文件,有什么特别 之外吗?其实它们就只是普通的文本文件,唯一的不同是有两点要求:
1. 命名:计划书的名称与计划书所属的用户名相同。
2. 格式: minute hour day month weekday command
取值范围: (0-59) (0-24) (1-31) (1-12) (0-6)
系统提供了几个特殊符号,使得时间的表示很灵活: *、/、&和-,其中*代表取值范围内的所有数字,/代表每的意思,*/5表示每5个单位,-表示 指定的时间段,","用于列举多个数字。
举例说明:
0 0 * * 1 echo Monday >> /home/test.txt ---每个星期一凌晨执行
* * * * date >> /home/date.txt ---每分钟执行一次
*/10 * * * 1-3 echo "ten minutes pasted" >> /home/time.txt ---星期一到三每10分钟执行一次。
通常,系统并不允许用户直接编辑计划书,/var/spool/cron/crontabs目录也只有root用户 才可读写。为了方便计划书的管理,系统提供了crontab命令:
用法:
crontab [ -u user ] 文件名
crontab [ -u user ] { -l | -r | -e }
-u 计划书所属的用户,默认为当前用户
-l 列出当前计划书的内容
-e 编辑计划书,系统默认的编辑器是vi。保存时,系统会检查格式是否符合要求。
-r 删除计划书
举例说明:
#crontab -u oracle /home/oracle/plan.txt 将plan.txt提交为用户oracle的计划书
#crontab /home/myplan.txt 将myplan.txt提交为当前用户的计划书 #contab -r  清除当前的计划书
几点补充:
1. 环境变量,cron进程执行任务时,并不加载计划书所属用户的环境变量,
只加载几个最 基本的环境变量,比如执行任务的sh,$HOME,$MAILTO等。
这几个环境变量的定义是在 /etc/crontab文件中。其中$MAILTO是指定计划执行过程中发生错误或者有数据输出时发 送邮件到哪个用户。

2. 不能运行crontab命令或者计划没有被执行,crontab的权限设置是由两个文件来决定的 :/etc/cron.allow, /etc/cron.deny。
如果存在/etc/cron.allow,则把要执行计划的 用户名称添加到其中;
若/etc/cron.deny存在,则确保要执行计划的用户名称不在 /etc/cron.deny中;如果两个文件都存在,/etc/cron.allow优先。

3. crontab 文件名,提交了新计划文件之后,原来的计划是否还在呢?答案是否定的。这 种方法进行的是完全覆盖,而非追加。
同时要说明的是,当运行命令:crontab newplan.txt 之后,系统复制了一份newplan.txt的内容用来创建该用户的计划书,
存 放到/var/spool/cron/crontabs目录下,newplan.txt与计划之间并无联系。但建议将其 保留,作为计划书的副本。
当要修改计划时,可先修改newplan.txt,然后再提交为新计划。

4. 计划书的输出和日志,如果用户的计划书在运行时有输出,用户是无法直接从终端上看 到的。
cron进程会将执行计划时产生的所有输出数据和错误信息发送到指定用户的邮箱 ,用户可到邮箱中去查看,所以建议在计划中把有用的输出数据重定向到文件中。
要想 查看各个计划的执行情况,可以查看cron进程的日志文件:/var/log/cron。

5. 更简单的任务计划, 如果觉得这样麻烦,还有一种简单的方法。
/etc下面有4个目录: cron.hourly,cron.daily,cron.weekly,cron.weekly,
这4个目录下脚本的执行周期 分别是每小时,每天,每周,每月。根据自己的需要,将要运行的脚本直接放置到对应 的目录下即可,系统会自动为你完成任务。

--------------------------------------------------------------------
同时,如果想取消cron任务,有3种途径:
1、crontab   -e     删除计划任务(将内容全部清空)
2、crontab -r 由crontab直接删除
2、删除脚本文件(可选)
3、删除   /var/spool/cron/用户名       (可选)
------------------------------------------------------------------
为用户添加一个计划任务
1、crontab   -e 
   用于设定时间执行脚本
   etc:     36   1   *   *   0   /root/test
2、cd   ~             
   进入root主目录,格式化的建立脚本文件
3、chmod   +x   filename 
      添加可执行权限
 上面这种是用命令的方式。
---------------------------------------------------------------
下面是用配置文件的方式
1.以root用户登陆,进入到/var/spool/cron/目录
2.在目录下面新建文件,文件名为用户名。
   例如为root用户增加计划 touch root (vi root也行)
3.在新建的文件中输入CronExpress 触发的时间表达式
  如
   #每天凌晨2点15分执行任务
   15 2 * * * 执行的命令(或者Shell脚本)
   完成后,保存文件
4.如果是脚本,则编写Shell脚本,需要添加可执行的权限 chmod +x fileName
5.crontab -u 用户名 -l 可以查看用户的crontab计划

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics