🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**本文是基于****`CentOS 7`**,其他`Linux`发行版可能略有不同。 ## crontab 适用场景 > crontab 用于提交和管理执行周期性的任务。 例如你需要在每天凌晨 1 点重启服务器,那么 crontab 可以很方便的帮你执行重启操作。 再例如,你要每隔 5 分钟检查某个服务是否在运行,也可以使用 crontab 来实现。 ## crontab 使用 ### 1、安装 crontab 一般 CentOS 会默认安装了`crontab`,执行下面命令,查看是否安装: ~~~text rpm -qa | grep crontab ~~~ 如果查询结果类似于下面,说明已安装: ~~~text crontabs-1.11-6.20121102git.el7.noarch ~~~ 如果结果为空,说明没有安装,执行下面命令进行安装即可: ~~~text yum install -y crontabs ~~~ ### 2、crontab 常用命令 查看`crontab`运行状态: ~~~text systemctl status crond ~~~ 如果显示结果为`Active: active (running)`则表示运行中,`Active: inactive (dead)`表示未运行。 如果`crontab`未运行,可以通过下面命令设置开机自启和启动。 设置`crontab`开机自启: ~~~text systemctl enable crond ~~~ 启动`crontab`: ~~~text systemctl start crond ~~~ 查看当前用户的定时任务: ~~~text crontab -l ~~~ ### 3、设置定时任务 这里我们以一个「每天晚上定时将指定文件夹打包成压缩包」的任务为例,说明设置定时任务的步骤。 首先,在`root`目录下创建一个`test`文件夹: ~~~text mkdir test ~~~ 然后在`root`下创建一个脚本`test.sh`: ~~~text vim /root/test.sh ~~~ 按`i`进入编辑状态,粘贴下面内容: ~~~text #! /bin/bash tar -zcvf test.tar /root/test ~~~ 按`Esc`键,再输入`:wq`保存文件。 执行下面命令即可编辑当前用户的定时任务: ~~~text crontab -e ~~~ 假如我想在每天 19:00 的时候压缩`test`文件夹,那么可以按下`i`进入编辑状态,粘贴下面内容: ~~~text 0 19 * * * bash /root/test.sh ~~~ 按`Esc`键,再输入`:wq`保存,当然你也可以修改为临近的时间,测试是否生效。 通过`crontab -l`可查看到已保存的定时任务: ~~~text 0 19 * * * bash /root/test.sh ~~~ 定时任务参数说明: ~~~text # .---------------- 分钟,取值范围为 0-59 # | .------------- 小时,取值范围为 0-23 # | | .---------- 日,取值范围为 1-31 # | | | .------- 月,取值范围为 1-12 # | | | | .---- 星期,取值范围为 0-7,0 和 7 都表示星期日 # | | | | | .-- 要执行的命令 # | | | | | | 0 19 * * * bash /root/test.sh ~~~ 参数中的添加了`bash`字段,是因为我在实际使用的过程中,发现定时任务不执行,搜索之后发现,需要在执行的命令前添加`bash`或者`/etc/profile;/bin/sh`。 到达指定时间之后,查看`/root`目录下是否已经有了`test.tar`压缩包,如果有说明定时任务执行成功;如果没有,则说明`crontab`没有执行。 ### 4、crontab 不执行的原因 * 检查`crontab`服务是否正常 * 检查脚本路径是否绝对路径 * 检查脚本路径前是否添加了`bash`或`/etc/profile;/bin/sh` 如果以上都没问题,那就要通过日志查找问题所在了。 ## 实际使用 我自己使用`crontab`是为了备份博客的数据到`gitee`,简单说下步骤。 * 将数据所在的目录初始化并推送到远程仓库 * 新建自动推送更新的脚本`git.sh` ~~~text #! /bin/bash t=$(date +%Y%m%d%H%M%S) cd /root/halo git pull git add . git commit -m $t git push ~~~ * `crontab -e`设置定时任务 ~~~text 0 23 * * * bash /root/halo/git.sh ~~~ 之所以备份到`gitee`而不是`GitHub`,当然是因为`gitee`访问稳定且快,这里需要注意,要通过`SSH`方式推送。 以上就是我在使用`crontab`过程的总结,欢迎沟通交流。