美文网首页
强大的crontab

强大的crontab

作者: 寂寞的原子 | 来源:发表于2016-09-25 23:41 被阅读376次

Unix-like 系统中都有一个定时任务服务:crontab
最近用它来处理开机自动启动服务,以及定期刷新证书,十分方便。

配置文件

# 用户级配置文件
$ crontab [-u user] {-e | -l | -r}
# `-e`编辑,`-l`显示,`-r`删除

# 系统全局配置文件
$ vim /etc/crontab
  • 使用crontab -e修改用户级配置文件,退出编辑时将自动重新加载,立即生效,并保存到/var/spool/cron/crontabs/$username(可能会根据系统有所变化)。
  • 系统级/etc/crontab通常会被cron服务每分钟读取一次,因此也相当于是实时生效的,无需重启系统。

配置格式

配置文件中可定义环境变量:

PATH=/usr/bin:/usr/local/bin

配置文件每行定义一个任务,格式如下,每列之间用至少一个空白符隔开:

# 用户级
时间 绝对路径 [参数...]

# 全局`/etc/crontab`多一列`user`
时间 用户 绝对路径 [参数...]

时间的格式通常为5列,分别表示

  • 分钟:0-59
  • 小时:0-23
  • 日期:0-31
  • 月份:0-12或者名字
  • 星期:0-7或者名字

每个字段均可以有一下表示方法:

  • 时间范围用-连接,如1-3
  • 多个时间点或范围用,隔开,如1,3-5
  • *,表示first-last,即每个最小单位都执行任务。
  • 时间间隔写在时间范围后面,用/隔开,如:*/2, 1-3/2

此外还有一些特殊的运行时机表示方法,用@开头:

  • @reboot,每次系统启动的时候运行。
    rc.local相比,这种方式开机启动脚本,可以更好地跨平台、跨系统,而且是异步加载,不会阻塞系统启动。

实例如下:

# 每5分钟执行
*/5 * * * * /home/gerald/run_every_5_min
# 每个月1号2点执行
0 2 1 * * /home/gerald/run_per_month
# 每个月1号和15号的2点执行
0 2 1,15 * * /home/gerald/run_twice_per_month
# 每次开机执行
@reboot /home/gerald/run_on_reboot

可能遇到的坑

  1. crontab配置正确,但没有执行。
    注意系统的cron服务有没有启动:
    # 查看状态
    $ sudo systemctl status cron
    # 激活服务
    $ sudo systemctl enable cron
    
  2. 系统全局配置/etc/crontab不执行。
    检查是否写了user,不然就会因为配置文件解析失败导致整个文件被忽略。
    因此个人认为使用crontab -e进行配置更好,如需以root用户配置则使用sudo crontab -esudo crontab -u root -e
  3. 脚本执行失败,找不到命令。
    值得注意的是,crontab执行任务时,默认是不带任何环境变量的。可以在配置中显式指定环境变量,或者使用绝对路径来执行命令。

相关文章

  • 强大的crontab

    Unix-like 系统中都有一个定时任务服务:crontab。最近用它来处理开机自动启动服务,以及定期刷新证书,...

  • Linux crontab命令

    crontab是一个强大的定时器,用户可以在编写脚本,使crontab定时执行一个shell脚本或者一系列Linu...

  • Linux强大的定时任务-Crontab

    linux内置的cron进程能帮我们实现各种各样的定时任务,例如:每周重启服务器、定时清理日志logs、定时刷数据...

  • crontab

    crontab 基本操作 crontab 开启和关闭 crontab 语法 示例

  • hpux下crontab无权创建的的问题解决

    1、Oracle用户没有权限执行crontab 引用 $ crontab -e crontab: you are ...

  • linux定时任务 crontab

    一、命令形式: crontab命令的一般形式为: crontab [-u user] file crontab [...

  • 树莓派用crontab定时运行python脚本

    crontab命令详解 1.命令格式: crontab [-u user] file crontab [-u us...

  • mac 定时任务

    1、使用crontab设置定时任务 crontab -e 或者sudo crontab -e。 00 16 * *...

  • linux Crontab

    Linux Crontab:Linux中用于执行定时任务的工具crontab -e:编辑定时任务crontab -...

  • Crontab

    crontab命令: crontab定时任务: example:

网友评论

      本文标题:强大的crontab

      本文链接:https://www.haomeiwen.com/subject/vinfyttx.html