6.2 定时任务

crontab 基本使用

  • crontab -e

    进入编辑器,编辑任务,编辑当前用户的定时任务,如果没有当前用户的配置文件,则会在/var/spool/cron/crontabs 下创建一个以用户名为名的文件

  • crontab -l 列出当前用户的crontab任务
  • crontab -r 清除所有的crontab任务

crontab -e 创建的文件编辑格式:

# m h  dom mon dow   command

分别为: 分 时 日 月 星期几 执行的命令

查看crontab服务状态:

service crond status

手动启动crontab服务:

service crond start

crontab 文件编辑

日志文件: ll /var/log/cron* 编辑文件: vim /etc/crontab

/etc/crontab 下文件的编辑格式:

# m h dom mon dow user  command

分别为: 分 时 日 月 星期几 用户 执行的命令

写法:

  • 1 * * * * user command => 每小时的1分执行命令
  • */5 * * * * user command => 每隔5分钟执行命令
  • * * * * 7 user command => 每逢周日的每分钟执行命令

介绍crontab文件

  • /etc/crontab

    在这个文件里并没有记录系统要执行哪些工作,而是记录了下面四个子目录。

  • /etc/cron.hourly
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

这些子目录里存放了一些脚本,到了crontab所指定的时间点,系统就会去执行这些子目录里的脚本。

限制对 cron 的使用

/etc/cron.allow和/etc/cron.deny 文件被用来限制对 cron 的使用:

  • 这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
  • 使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。无论使用控制文件中的规定如何,root 都总是可以使用 cron。
  • 如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
  • 如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。

脚本

执行脚本的command:

bash ./shell_to_be_excuted.sh

注意:

  1. 环境变量问题,例如crontab不能识别Java的环境变量 crontab执行shell时,只能识别为数不多的环境变量,普通的环境变量是无法识别的,所以在编写shell时,最好使用export重新声明变量,确保脚本执行
  2. 命令的执行最好用脚本
  3. 脚本权限加/bin/sh,规范路径/server/scripts
  4. 时间变量用反斜线转义,最好用脚本
  5. 定时任务添加注释
  6. 定时任务里面的程序脚本尽量用全路径
  7. 避免不必要的程序以及命令输出
  8. 定时任务之前添加注释
  9. 打包到文件目录的上一级
  10. 当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron
  11. 千万别乱运行crontab -r。它从Crontab目录/var/spool/cron中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
  12. 在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’

results matching ""

    No results matching ""