crontab定时执行shell命令
Linux 系统中用于设置周期性被执行的指令的命令
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/
几点注意事项
-
所有命令需要使用绝对路径
-
如果调用shell脚本, 需要注意如下开头
#!/bin/sh
. /etc/profile
. ~/.bash_profile -
如果需要添加环境变量, 注意在可执行文件前添加
. /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
, 将上述规则加入定时计划表中