麦克斯仇
Think different
159
文章
29503
阅读
首页
INDEX
文章
ARTICLE
关于
ABOUT
crontab定时任务
创建日期:
2019/11/05
修改日期:
2022/10/10
Linux
参考文档:[https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html](https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html) ### 1 介绍 用于定期执行程序或脚本 ### 2 语法 `crontab [-u user] file` `crontab [-u user] [-l | -r | -e]` | 参数 | 含义 | 用法 | | - | - | - | | -u user | 附加要修改crontab的用户名 | | | file | 导入指定文件内的crontab | `crontab filename` 导入指定文件内的定时任务 | | -l | 列出当前crontab || | -r | 删除当前crontab || | -e | 编辑当前crontab | `crontab -e` 开启编辑定时任务 | #### 2.1 定时任务格式 `* * * * * user-name command` | 列 | 含义 | 取值范围 | | - | - | - | | * | 分 | 0-59 | | * | 时 | 0-23 | | * | 日 | 1-31 | | * | 月 | 1-12 或者 jan,feb,mar,apr ... | | * | 周 | 0-6(周日是0或者7) 或者 sun,mon,tue,wed,thu,fri,sat | | user-name | 指定用户 | 非必填 | | command | 脚本 | 一定要使用绝对路径 | #### 2.2 特殊符号 | 符号 | 含义 | | ------------ | ------------ | | * | 代表任意时间,比如第一个 `*` 代表每分钟 | | a,b | 代表不连续,比如 `12,18,33 * * * *` 代表每小时内的第12,18,33分钟执行一次命令 | | a-b | 代表连续,比如 `0 5-22 * * * ` 代表每天的5点至22点整执行一次任务 | | /n | 代表每隔,比如 `*/10 * * * *` 代表每10分钟执行一次任务 | | a/n | 代表每隔,比如 `3/10 * * * *` 代表从第3分钟开始,每10分钟执行一次任务 | ### 3 定时任务示例 | 示例 | 含义 | | ------------ | ------------ | | `* * * * *` | 每天每小时每分钟都执行一次 | | `0 8 * * 1` | 每周一的8点0分执行一次 | | `8 8 8,18,28 * * ` | 每月的8,18,28号8时8分执行 | | `0 22 * * 1-5` | 周一至周五的22时0分执行 | | `*/10 * * * *` | 每10分钟执行一次 | | `3/10 8-20 6,16,26 6-9 1-5` | 6月至9月,每月6,16,26日,且是周一至周五,8时至20时的每时从第3分钟开始,每10分钟执行一次 | >提示:周和日最好不要同时使用 ### 4 导入导出 ```shell #导入 [root@localhost ~]# crontab filename #导出 [root@localhost ~]# crontab -l >filename ``` ### 5 注意事项 #### 5.1 环境变量 crontab在执行任务时不会加载任何环境变量,所以给出如下建议 1. 脚本中涉及文件路径时写全局路径; 2. 脚本执行要用到java或其他环境变量时,通过source命令引入环境变量。如: ```shell # cat autoBackupDatabase.sh !/bin/sh source /etc/profile mysqldump ...... ``` 3. 当手动执行脚本OK,但是crontab死活不执行时,很可能是环境变量惹的祸,可尝试在crontab中直接引入环境变量解决问题。 ```shell 0 1 * * * . /etc/profile;/bin/sh /root/autoBackupDatabase.sh ``` #### 5.2 特殊的% 在crontab中%是有特殊含义的,表示换行的意思,如果要用的话必须进行转义%。 如经常用的`date '+%Y%m%d'`在crontab里是不会执行的,应该换成`date '+\%Y\%m\%d'` ### 6 服务管理 > 配置文件编辑后自动重载,无需重启服务。一般情况下系统默认`已安装`且`已启用`且`已设置开机自启`。但是最好检查一下服务是否启用 以`CentOS7.8`为例 ```bash # 查看服务状态 systemctl status crond.service # 开启服务 systemctl start crond.service # 关闭服务 systemctl stop crond.service # 重启服务 systemctl reload crond.service # 检查是否开机自启 systemctl is-enabled crond.service # 设置开机自启 systemctl enable crond.service # 关闭开机自启 systemctl disable crond.service ```
7
全部评论