Linux命令(17)---crontab

crontab命令

crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。而crontab命令是用户用来设置定时规则的命令。通过crontab可以在固定的间隔时间执行指定的系统指令或script脚本。

用法:

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

  • -e编辑用户的crontab
  • -l查看用户的crontab
  • -r删除用户的crontab

crontab [-e | -l]实际上就是操作/var/spool/cron/当前用户 这样的文件。
通过crontab查看或编辑的定时任务规则默认放到/var/spool/cron/用户名文件 中。
这里写图片描述

定时任务文件

文件说明
/etc/cron.deny该文件中所列用户不允许使用crontab命令
/etc/cron.allow该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
/var/spool/cron/所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名

两种使用方式:

在root下操作

[root@ianLinux ~]# crontab -u Ian -l
no crontab for Ian
[root@ianLinux ~]# crontab -u Ian -e
no crontab for Ian - using an empty one

#####
~ 
...
"/tmp/crontab.vEWEjl" 1L, 6C written
crontab: installing new crontab
[root@ianLinux ~]# crontab -u Ian -l
#####
[root@ianLinux ~]# cat /var/spool/cron/Ian
#####     

也可以切换到Ian下进行操作:

[Ian@ianLinux ~]$ crontab -l
#####
[Ian@ianLinux ~]$ crontab -e

#####
#####
~                                                                                
~  
"/tmp/crontab.36iJyx" 2L, 12C written
crontab: installing new crontab 
[Ian@ianLinux ~]$ crontab -l
#####
#####

但此时有个问题:
这里写图片描述
既然/var/spool/cron/Ian文件的属主是root,Ian是没有读写执行权限的。
这里写图片描述
那么/var/spool/cron/Ian是如何被修改的呢?
这里写图片描述
rws注意’s’,所以我们发现crontab有特权。

执行定时任务时crontab命令的使用格式

用户的定时任务规则一般分为6个段,空格来分隔。
系统的定时任务为/etc/crontab,分为7段,空格来分隔。
前五段为时间的设定段,第六段为所要执行的命令或脚本任务段。

用户定时任务格式举例:
01 * * * * cmd
cmd为要执行的命令或脚本。每列之间必须要有一个空格。

cat /etc/crontab这是系统的定时任务格式。系统的和用户的前五个段是一样的。
这里写图片描述
分时日月周。

crontab语法格式中时间段的含义

含义取值范围
第一段分钟00-59
第二段小时00-23
第三段01-31
第四段月份01-12
第五段周几0-7(0和7都是星期日)

crontab语法格式中特殊符号的含义:

符号含义
*表示任意时间,即“每”。00 23 * * * cmd 表示每月每周每日的23:00都执行cmd任务。
-表示一个时间范围。00 17-19 * * * cmd 表示每月每周每日的17,18,19点整点执行cmd任务。
,表示分隔时段。30 17,18,19 * * * cmd 表示每天17、18、19点30执行cmd任务。
/nn表示数字,即每隔n单位时间。*/10 * * * * cmd表示每隔10分钟执行cmd任务。

实例:
①30 3,12 * * * /bin/sh /scripts/test.sh,此定时任务的意思是每天凌晨3:30和中午12:30执行/scripts/test.sh脚本。

②30 */6 * * * /bin/sh /scripts/test.sh,此时定时任务的意思每天每隔6个半小时执行/scripts/test.sh脚本。

③30 8-18/2 * * * /bin/sh /scripts/test.sh,此定时任务的意思是每天的上午8点到下午18点之间每隔2个半小时,执行/scripts/test.sh脚本。

④45 4 1,10,22 * * /application/apache/bin/apachectl graceful,此定时任务的意思是每个月的1、10、22日的凌晨4:45分重启apache。

* 23,00-07/1 * * * /application/apache/bin/apachectl graceful

这个例子不表示晚上23点和上午0-7点之间每隔一小时重启apache。
它表示每分钟都执行任务,即晚上23点和上午0-7点之间每隔一小时的每分钟都重启apache。

定时任务的使用实例

例1:每分钟打印一次自己的名字全拼到“/data/log/自己的名字命名的文件”。
这里写图片描述

这里写图片描述

注意:
1、定时任务要加注释
2、结尾不要有>/dev/null 2>&1
3、/data/log目录必须要存在才能有结果
4、定时任务中的路径一定要是绝对路径
5、crond服务必须开启运行

例2:每周六、日上午9:00和下午14:00执行/data/scripts/Ian.sh。
要求:/data/scripts/Ian.sh脚本的功能是打印当天的日期格式为2016-09-12。

[root@ianLinux data]# mkdir /data/scripts/ 
[root@ianLinux data]# echo 'date +%F' >/data/scripts/Ian.sh

因为Ian.sh没有执行权限所以不能执行。
这里写图片描述

所以执行定时任务时,如果是执行脚本,在脚本前面带上/bin/sh命名,否则有可能因为忘了为脚本设定执行权限,从而无法完成任务。

[root@ianLinux data]# /bin/sh /data/scripts/Ian.sh
2016-09-12

这里写图片描述

书写定时任务的核心要领

1. 加必要注释

加了注释,就知道定时任务运行的是什么作业,以防以后作业混乱。

2. 执行shell脚本任务前加/bin/sh
/bin/sh /data/scripts/Ian.sh

执行定时任务时,如果是执行脚本,在脚本前面带上/bin/sh命名,否则有可能因为忘了为脚本设定执行权限,从而无法完成任务。

3. 定时任务命令或脚本结尾加>/dev/null 2>&1
00 09,14 * * 6,0 /bin/sh /data/scripts/Ian.sh >/dev/null 2>&1

定时任务每执行一次都会给管理员发邮件,会将cron执行脚本中的output和warning信息,都会以邮件的形式发送cron所有者。
如果邮件服务没开,就会把邮件放到邮件队列里去,实际就是放到/var/spool/clientmqueue邮件临时队列目录里去(CentOS6.X是/var/spool/postfix/maildrop)。如果定时任务规范结尾不加 >/dev/null 2>&1,定时任务每执行一次,就往里面填一个小文件,这就会很容易导致inode被用完。
这里写图片描述

4.定时任务命令或程序最好写到脚本里执行
[root@ianLinux data]# echo 'date +%F' >/data/scripts/Ian.sh
[root@ianLinux data]# cat /data/scripts/Ian.sh 
date +%F
...
[root@ianLinux data]# crontab -l|tail -2
##cron job at 20160912 by Ian for...
00 09,14 * * 6,0 /bin/sh /data/scripts/Ian.sh >/dev/null 2>&1
5. 在指定用户下执行相关的定时任务

需要root权限执行的任务可以登录到root用户下设置,如果不需要root权限可以登录到普通用户下。
这里要特别注意不同用户的环境变量问题,如果是调用了系统环境变量/etc/profile,最好在程序脚本中将用到的环境变量重新export下。

6. 生产任务程序不要随意打印输出信息

在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向到日志文件里,避免产生系统垃圾。

7. 定时任务执行的脚本要规范路径

00 09,14 * * 6,0 /bin/sh /data/scripts/Ian.sh >/dev/null 2>&1

8. 配置定时任务规范操作过程
  • 首先在命令行操作成功,然后复制成的命令到脚本里,在各个细小环节减少出错的机会。
  • 然后测试脚本,测试成功后,复制脚本的规范路径到定时任务配置里。
  • 先在测试环境下测试,然后正式环境规范部署。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值