Skip to main content

crontab定时执行shell命令

Linux 系统中用于设置周期性被执行的指令的命令

Linux crontab 命令 | 菜鸟教程

crond 命令每分钟定期检查是否有要执行的工作, 如果有则会自动执行

需要注意, 新建的 cron 任务至少要过两分钟后执行, 或者可以重启 cron 来马上执行

命令语法

# 可以将内容写入到文本中(无后缀), 然后配置文件
crontab [ -u user ] file
# 或者直接配置
crontab [ -u user ] { -l | -r | -e }
  • crontab: 是用来让使用者在固定时间或间隔执行程序, 相当于时程表
  • -u user: 指设定指定的user的时间表, 需要有指定的权限, 如果没有标识配置自己的时间表
  • -e: 编辑时间表, 如果第一次使用需要选择使用的编辑器
  • -r: 删除时间表
  • -l: 列出时间表内容

时间格式

Cron 表达式在线工具:https://www.jyshare.com/front-end/9444/

几点注意事项

  1. 所有命令需要使用绝对路径

  2. 如果调用shell脚本, 需要注意如下开头

    #!/bin/sh

    . /etc/profile
    . ~/.bash_profile
  3. 如果需要添加环境变量, 注意在可执行文件前添加. /etc/profile;/bin/sh, 生效环境变量

    20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

实例

如下图片为当前博客每日1点 00分, 15分, 30分定期执行的拉取和部署操作

tip

防止有的命令执行超时等待, 防止出现资源抢占问题, 因此将命令拆解, 增加等待时长

  • 创建文件crontab-eksnotebook

    0 1 * * * cd /home/ubuntu/wiki && git fetch --all && git reset --hard origin/master
    10 1 * * * cd /home/ubuntu/wiki && git submodule update --init
    20 1 * * * cd /home/ubuntu/wiki && pnpm install
    50 1 * * * cd /home/ubuntu/wiki && pnpm build
    #
    15 2 * * * cd /home/ubuntu/page && git pull origin master
    #
    30 2 * * * cd /home/ubuntu/images && git pull origin master && git add -A
    50 2 * * * cd /home/ubuntu/images && git commit -m "Update: $(date +\%Y-\%m-\%d \%H:\%M:\%S)"
    10 3 * * * cd /home/ubuntu/images && git push origin master
  • root用户下执行crontab crontab-eksnotebook, 将上述规则加入定时计划表中