zoukankan      html  css  js  c++  java
  • crontab极简教程

    crontab简介

    Linux crontab是用来定期执行程序的命令。

    当安装完成操作系统之后,默认便会启动此任务调度命令。

    crontab常用命令

    • crontab -e
      打开vi编辑器,编写一个定时任务,退出vi后,若vi内容不为空,则会创建一个任务。

    • crontab -l
      查看当前已经创建的定时任务

    • crontab -r
      删除当前用户创建的定时任务。一般删除定时任务不这样操作,而是使用crontab -e 命令打开任务,将任务内容清空,保存并退出之后,该任务就删除了。

    • tail -f /var/log/cron
      查看任务执行的日志

    简单示例

    创建两个定时任务。第一个,一分钟执行一次,使用echo输出一串字符;第二个,两分钟执行一次,使用echo输出另一串字符。

    • 创建任务

    在linux 的shell 中输入crontab -e 命令

    在打开的vi编辑器中输入以下内容:

    * * * * *  echo "Once a minute"
    
    */2 * * * *  echo "Execute once every two minutes"
    
    
    

    保存并退出

    • 查看刚才创建的定时任务

    在linux 的 shell 中输入crontab -l 命令

    能输出上述vi中的内容,说明任务创建成功

    • 查看任务执行日志

    在linux的shell中输入tail -f /var/log/cron 命令

    可以看到类似如下的输出:

    
    Oct 14 20:28:01 v2 CROND[2764]: (root) CMD (echo "Execute once every two minutes")
    Oct 14 20:28:01 v2 CROND[2765]: (root) CMD (echo "Once a minute")
    Oct 14 20:28:01 v2 CROND[2762]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:28:01 v2 CROND[2763]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:28:06 v2 crontab[2853]: (root) LIST (root)
    Oct 14 20:29:01 v2 CROND[3830]: (root) CMD (echo "Once a minute")
    Oct 14 20:29:01 v2 CROND[3827]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:30:01 v2 CROND[4871]: (root) CMD (/usr/lib64/sa/sa1 1 1)
    Oct 14 20:30:01 v2 CROND[4875]: (root) CMD (echo "Execute once every two minutes")
    Oct 14 20:30:01 v2 CROND[4876]: (root) CMD (echo "Once a minute")
    Oct 14 20:30:01 v2 CROND[4870]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:30:01 v2 CROND[4869]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:31:01 v2 CROND[6010]: (root) CMD (echo "Once a minute")
    Oct 14 20:31:01 v2 CROND[6009]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:32:01 v2 CROND[7043]: (root) CMD (echo "Execute once every two minutes")
    Oct 14 20:32:01 v2 CROND[7044]: (root) CMD (echo "Once a minute")
    Oct 14 20:32:01 v2 CROND[7041]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:32:01 v2 CROND[7042]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:33:01 v2 CROND[8130]: (root) CMD (echo "Once a minute")
    Oct 14 20:33:01 v2 CROND[8129]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:34:01 v2 CROND[9158]: (root) CMD (echo "Once a minute")
    Oct 14 20:34:01 v2 CROND[9159]: (root) CMD (echo "Execute once every two minutes")
    Oct 14 20:34:01 v2 CROND[9157]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:34:01 v2 CROND[9156]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:35:01 v2 CROND[10255]: (root) CMD (echo "Once a minute")
    Oct 14 20:35:01 v2 CROND[10254]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    Oct 14 20:36:01 v2 CROND[11251]: (root) CMD (echo "Once a minute")
    Oct 14 20:36:01 v2 CROND[11250]: (root) CMD (echo "Execute once every two minutes")
    Oct 14 20:36:01 v2 CROND[11249]: (root) MAIL (mailed 9 bytes of output but got status 0x004b#012)
    
    

    定时执行一个脚本

    每天的凌晨5点钟,备份mysql的数据库。crontab只负责触发定时任务,具体的备份工作由mysqldump来执行。

    • crontab 任务
    0 5 * * *   sh /data/mysql/mysqldump-backup.sh 
    
    • mysql备份脚本

    宿主机为阿里云ecs,操作系统为CentOS,mysql是用docker搭建的。以下脚本是在docker宿主机中执行。

    #!/bin/bash
    #设置mysql的登录用户名、密码、服务器host、端口、数据库名称、容器名称(根据实际情况填写)
    mysql_user="what"
    mysql_password="what"
    mysql_host="what"
    mysql_port="what"
    db_name="what"
    contanier_name_or_id="what"
    
    
    # 备份文件存放地址(根据实际情况填写)
    backup_location=/data/mysql/data/backups
    
    # 是否删除过期数据
    expire_backup_delete="OFF"
    expire_days=1
    backup_time=`date +%Y%m%d%H%M`
    backup_dir=$backup_location
    # 备份指定数据库中数据
    docker exec   $contanier_name_or_id mysqldump  -u$mysql_user -p"$mysql_password" -B $db_name > $backup_dir/$db_name-$backup_time.sql
    
    echo "备份文件路径: $backup_dir/$db_name-$backup_time.sql"
    
     # 删除过期数据
    if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
            `find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
            echo "已清理过期的数据库备份文件..."
    fi
    

    backup_location:宿主机绝对路径

    $mysql_password:若mysql账户密码中存在特殊字符,需要使用双引号包裹此变量

    exec:exec后面不可以添加「-it」。否则会导致备份的sql文件中内容为空。exec 加了 -it 参数就开启了一个终端,crontab任务无法进入任何终端。

  • 相关阅读:
    Win10下TensorFlow安装错误解决:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
    OA Framework or ADF?
    Why do I get the error REP-0713 when I run my report?
    Example Report Using FND FORMAT_CURRENCY
    FND SRWINIT & FND SRWEXIT
    【转】Oralce PL/SQL 堆栈信息追踪
    .net core 杂记:用Autofac替换内置容器
    .net core 杂记:日记记录
    Entity Framework 查漏补缺 (三)
    Entity Framework 查漏补缺 (二)
  • 原文地址:https://www.cnblogs.com/Naylor/p/13817200.html
Copyright © 2011-2022 走看看