美文网首页
CentOS 7 定时任务 crontab 入门

CentOS 7 定时任务 crontab 入门

作者: 掘墓人 | 来源:发表于2020-03-21 21:11 被阅读0次

    个人需要备份博客数据,决定使用 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 过程的总结,欢迎沟通交流。

    欢迎访问的个人博客:掘墓人的小铲子

    相关文章

      网友评论

          本文标题:CentOS 7 定时任务 crontab 入门

          本文链接:https://www.haomeiwen.com/subject/rmzuyhtx.html