shell学习笔记之crontab

一:知识背景

  crontab是用来定时执行脚本的进程,crond进程每分钟会定时检查是否有要执行的任务。操作系统会安装完成会默认安装工具并自动启动crond进程。

  业务上主要用于:

      1.系统周期性执行的清理缓冲,备份系统数据

      2.个人用户进程的守护、定时清理日志 

二:语法知识

  crontab 【-u user】【-e| -r| -l】

 【-u user】:就是指定用户的时程表,当然指定的前提是当前用户权限大于指定用户。这个可以直接省略,就是表示以当前用户创建、删除或列出时程表,

 【-options】: -e 创建crontab文件,内定的文字编辑指定是vim,所以也是分为命令行模式和文本模式,按i进行编辑

          -r 删除当前时程表,权限约束

        -l 列出当前时程表,权限约束

  crontab文件语法: crontab会进行语法检查,vim不会

 大家看到的注释就完美表达了crontab文件的语法

* * * * * user-name command 

五个星号表示是 分 时 每月哪一天 月份 周几

   * 代表不匹配  

   a-b 表示这段时间都执行

    a,b这个时间点都执行

  */n ,例如*/5 * * * * 表示每隔5分钟执行一次,n为执行的频率

### crontab也分为两种:系统级和用户级

  系统级位于/etc/crontab的方法只能root用户使用,crontab -e这种所用用户都可以使用并保存在/var/spool/cron/username,系统级任务不会写入后者。

crontab -e 和/etc/crontab修改语法不一致,/etc/crontab多一个user指定。cron会每分钟读取/etc/crontab和/var/spool/cron/username中的数据内容,因此,只要编辑完/etc/crontab文件并保存之后,

crontab会执行。

  那就是 crontab -e 这个 crontab 其实是 /usr/bin/crontab 这个运行档,但是 /etc/crontab 可是一个纯文字档,必须用 root 的身份编辑这个文件。

 

  系统级和用户级区别还在于:

  MailTo=root:这个字段就是每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。一般不处理就是放在/var/mail/username,所以一般都会将日志信息重定向到null。

  crontab -r 也只是删除用户级别的时程表,所有的/var/mail/username 删除所有用户文件,或者加上user删除特定用户时程表,crontab -l 显示的任务也都是用户级任务。

crontab有一点需要大家注意的就是:

周(f5)和 日月(f3)不能并存,比如以下的模式:

0 0 12 12 5 root echo "just test" < 错误的写法

 

  本来你以为12月12日且为星期五才会进行这项工作,无奈的是,系统可能会判定每个星期五作一次,或每年的12月1 2日分别进行,如此一来与你当初的规划就不一样了,得要注意这个地方!上述的写法是不对的

 2

 

 

 

 

 

  

posted @ 2019-01-06 15:17  TrumanShow  阅读(858)  评论(0编辑  收藏  举报