个人需要备份博客数据,决定使用 CentOS 的定时任务,正好将设置定时任务的过程写一下。
本文是基于 CentOS 7
,其他 Linux
发行版可能略有不同。
crontab 适用场景
crontab 用于提交和管理执行周期性的任务。
例如你需要在每天凌晨 1 点重启服务器,那么 crontab 可以很方便的帮你执行重启操作。
再例如,你要每隔 5 分钟检查某个服务是否在运行,也可以使用 crontab 来实现。
crontab 使用
1、安装 crontab
一般 CentOS 会默认安装了 crontab
,执行下面命令,查看是否安装:
rpm -qa | grep crontab
如果查询结果类似于下面,说明已安装:
crontabs-1.11-6.20121102git.el7.noarch
如果结果为空,说明没有安装,执行下面命令进行安装即可:
yum install -y crontabs
2、crontab 常用命令
查看 crontab
运行状态:
systemctl status crond
如果显示结果为 Active: active (running)
则表示运行中,Active: inactive (dead)
表示未运行。
如果 crontab
未运行,可以通过下面命令设置开机自启和启动。
设置 crontab
开机自启:
systemctl enable crond
启动 crontab
:
systemctl start crond
查看当前用户的定时任务:
crontab -l
3、设置定时任务
这里我们以一个「每天晚上定时将指定文件夹打包成压缩包」的任务为例,说明设置定时任务的步骤。
首先,在 root
目录下创建一个 test
文件夹:
mkdir test
然后在 root
下创建一个脚本 test.sh
:
vim /root/test.sh
按 i
进入编辑状态,粘贴下面内容:
#! /bin/bash
tar -zcvf test.tar /root/test
按 Esc
键,再输入 :wq
保存文件。
执行下面命令即可编辑当前用户的定时任务:
crontab -e
假如我想在每天 19:00 的时候压缩 test
文件夹,那么可以按下 i
进入编辑状态,粘贴下面内容:
0 19 * * * bash /root/test.sh
按 Esc
键,再输入 :wq
保存,当然你也可以修改为临近的时间,测试是否生效。
通过 crontab -l
可查看到已保存的定时任务:
0 19 * * * bash /root/test.sh
定时任务参数说明:
# .---------------- 分钟,取值范围为 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
#! /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
设置定时任务
0 23 * * * bash /root/halo/git.sh
之所以备份到 gitee
而不是 GitHub
,当然是因为 gitee
访问稳定且快,这里需要注意,要通过 SSH
方式推送。
以上就是我在使用 crontab
过程的总结,欢迎沟通交流。
本文由 掘墓人 创作,采用 CC BY-NC-ND 4.0 DEED
,转载或翻译请注明出处。
最后编辑时间为: 2020年03月20日