crontab 使用小结

4 篇文章 0 订阅
4 篇文章 0 订阅


        由于万恶的监控,所以布定时脚本是非常必要的。

        因此少不了crontab的使用。

        由于对crontab的认识不够,在使用的过程中容易产生误区,以下作总结,同仁共殇。

        目录:

         1. crontab 服务相关

         2. crontab编辑和查看

         3. crontab 格式

         4. crontab没有运行的相关检查


        1. 首先,linux的crontab默认是没有开启的,服务相关语句如下(root用户下):

        chkconfig   |   grep cron        #先确认一下是否已经安装,如果安装了,服务名称叫什么(非常必要,因此linux中,服务名是crond,suse中为cron)

        service cron status    #查看服务状态(以suse为例)

        service cron restart    #重启cron服务

        service cron start        #启动cron服务

        service cron stop        #停止cron服务

        service cron reload    #重新载入配置(实际上我从来没有使用过这个选项)


        2. crontab的生成和查看相关语句:

        crontab -l                  #查看当前用户的crontab

        crontab -e                 #编辑当前用户的crontab(vi模式,都懂的,编辑完ZZ保存或者:wq)

        crontab -r                  #删除当前用户的crontab

         crontab -u sam -l   #查看用户sam的crontab(root用户下)

         crontab -u sam -e   #编辑用户sam的crontab(root用户下)

         crontab -u sam -r   #删除用户sam的crontab(root用户下)


        3. crontab 格式:

        第1列分钟1~59
        第2列小时1~23(0表示子夜)
        第3列日1~31
        第4列月1~12
        第5列星期0~6(0表示星期天)
        第6列要运行的命令

        这里有crontab文件条目的一些例子(主要比较疑惑的是*/2这种表示方式,这个表示“每2*”,第1列表示每2分钟,第2列表示每2小时……):

        30 21 * * * /usr/local/apache/bin/apachectl restart
        上面的例子表示每晚的21:30重启apache。

        45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart
        上面的例子表示每月1、10、22日的4 : 45重启apache。

        10 1 * * 6,0 /usr/local/apache/bin/apachectl restart
        上面的例子表示每周六、周日的1 : 10重启apache。

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

        0 23 * * 6 /usr/local/apache/bin/apachectl restart
        上面的例子表示每星期六的11 : 00 pm重启apache。

        * */1 * * * /usr/local/apache/bin/apachectl restart
        每一小时重启apache

        * 23-7/1 * * * /usr/local/apache/bin/apachectl restart
        晚上11点到早上7点之间,每隔一小时重启apache

        0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
        每月的4号与每周一到周三的11点重启apache

        0 4 1 jan * /usr/local/apache/bin/apachectl restart
        一月一号的4点重启apache


        4. crontab没有运行的相关检查:

        (1)检查 /usr/lib/cron 目录是否有cron.allow 和 cron.deny文件,至少要有一个,其它用户才能执行crontab服务,建议自己建一个cron.allow文件。

        (2)检查一下crontab服务有没有启动,建议重启一下,以防crontab服务卡死。

        (3)使用* * * * * date >> /home/sam/test.txt 条目测试是不是每分钟都放test.txt 写系统日期。如果有,crontab就正常运行,如果没有,参照上述解决方式。

        (4)认真检查代码,看能不能运行。

        (5)如果执行的是shell,检查脚本是否有加入环境变量的执行语句。(一般都是死在这里,添加内容为:source /home/sam/.profile 或者 source /home/sam/.bath_profile)

        (6)如果执行的是perl,检查脚本是否有加入环境变量的执行语句。(死在这里的更多。加入方法见下面模块。)

sub set_env{      #定义子函数
  my $user=`whoami`;      #获取当前用户名
  chomp($user);
  my $profile="/home/".$user."/.profile";
  if (! -e $profile ){
    $profile="/home/".$user."/.bash_profile"
  }
  open(NEWENV, ". $profile && env|");     #打开环境变量.profile
  while($line=<NEWENV>){
    if ($line=~/(\w+)=(.*)/){             #正则表达式肢解.profile内容
      $ENV{$1}="$2";                      #  $ENV{PATH}=/home/sam/bin:PATH  这个就是perl里面定义环境变量的语法
    }
  }
  close NEWENV;
}
set_env;      #执行函数
        (7)另外,检查操作系统时间、检查脚本是否是有x权限等就不再赘述了。



        后记:crontab执行的时候如果有报错,就会发个mail给你,提示你:You have new mail in /var/mail/sam

        你cat查看一下,就知道脚本怎么错了。98%是环境变量没有配(一般就是指Oracle的HOME、SID等内容)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值