zoukankan      html  css  js  c++  java
  • shell编辑crontab任务

    crontab是Linux下执行定时任务的工具,之前偶尔需要用到时都是通过执行crontab -e命令或者通过root身份直接编辑/etc/cron.*/下的文件来添加定时任务。这段时间遇到了需要通过shell来自动添加或删除crontab的需求。在shell中无法通过crontab -e来与crontab编辑器交互,同时执行命令的人不一定有root身份,也无法直接编辑/etc/cron.*/下的文件。

    经过一番实践,通过crontab -l配合sed命令来完成了这个自动添加及删除crontab的操作,在此记录下。

    crontab的语法

    一张很明晰的crontab语法图,附在这以备用

    crontab的语法

    shell控制脚本

    #!/usr/bin/env bash
    
    CUR_PATH=$(cd "$(dirname "$0")"; pwd)
    
    # 要定时执行的任务
    TASK_COMMAND="echo 'aaa' >> /var/cron_test"
    # 要添加的crontab任务
    CRONTAB_TASK="*/30 * * * * ${TASK_COMMAND}"
    # 备份原始crontab记录文件
    CRONTAB_BAK_FILE="${CUR_PATH}/crontab_bak"
    
    # 创建crontab任务函数
    function create_crontab()
    {
        echo 'Create crontab task...'
        crontab -l > ${CRONTAB_BAK_FILE} 2>/dev/null
        sed -i "/.*${TASK_COMMAND}/d" ${CRONTAB_BAK_FILE}  # 已存在任务时会被sed删除,防止重复添加
        echo "${CRONTAB_TASK}" >> ${CRONTAB_BAK_FILE}
        crontab ${CRONTAB_BAK_FILE}
        
        echo 'Complete'
    }
    
    # 清除crontab任务函数
    function clear_crontab(){
        echo 'Delete crontab task...'
        crontab -l > ${CRONTAB_BAK_FILE} 2>/dev/null
        sed -i "/.*${SCRIPT_NAME}/d" ${CRONTAB_BAK_FILE}
        crontab ${CRONTAB_BAK_FILE}
        
        echo 'Complete'
    }
    
    if [ $# -lt 1 ]; then
        echo "Usage: $0 [start | stop]"
        exit 1
    fi
    
    case $1 in
        'start' )
            create_crontab
            ;;
        'stop' )
            clear_crontab
            ;;
    esac
    
  • 相关阅读:
    StrToUnicode C#语言如何将汉字转换成Unicode字符
    SQLServer 2008数据库查看死锁、堵塞的SQL语句
    String.IsNullOrEmpty和"".length>0 那个更高效
    使用策略设计模式,反射,解决商城系统中的商品折扣问题
    假分页
    MAC校验
    eclipse环境加载svn
    将数据导出Excel格式
    svn提交问题
    字符串前拼接字符
  • 原文地址:https://www.cnblogs.com/haoxi/p/8138801.html
Copyright © 2011-2022 走看看