zoukankan      html  css  js  c++  java
  • Crontab定时任务运行失败,单独运行shell脚本可行

    排除思路

    1. 确保crond服务是开机自启和当前是启动的

    # centos 7
    systemctl status crond
    systemctl start crond
    
    # centos 5,6
    service crond  status 
    chkconfig crond on
    

     2. 检查mail邮件里面关于该计划任务的错误信息。

    mail
    

    这里借用下网络上面的图过来下,

    这个情况,一般这些环境配置在profile文件中的, 可以在脚本中source下这个文件, 让其生效,或者把对应的配置写到脚本里面来。

    source /etc/profile

    3. 脚本里面的命令程序没有在PATH里面。 

    脚本里面执行的命令,没有在计划任务执行的环境变量里面有, 需要添加进path或者命令写全路径。

    # 在可以执行的终端内获取所有PATH, 写入脚本中
     echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php/bin:/usr/local/docker/bin:/usr/local/java/jdk1.8.0_191/bin:/usr/local/java/jdk1.8.0_191/jre/bin:/usr/local/flume/bin:/usr/local/go/bin:/usr/local/go/bin:/root/bin
    
    
    #在执行脚本中加入如下类似行
    
    PATH=/usr/local/bin:$PATH

    4. 使用bash替换

    使用crontab -e编辑的计划配置行中, 命令是有限制的, 重定向和特殊符号是不支持的, 这些是bash提供的,可以使用如下方式配置。

    # add by zhaojiedi 2019.08.30 
    14 * * * * bash /usr/local/bin/backup_k8s.sh

     5. 封装下计划任务脚本行

    我们在计划任务行,写的命令如果长并且带有一些date命令等, 建议把这些命令写入到一个新的文件里面去, 计划任务命令行写这个新的文件作为命令执行。

    # 原来计划任务行
    * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh
    
    # 改写后的
    echo "cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh"  > /usr/local/bin/top10.sh
    * * * * * bash /usr/local/bin/top10.sh

    最后放一个完整点的计划任务脚本

    #!/bin/bash
    source /etc/profile
    PATH=/usr/local/bin:$PATH
    base_dir=/alidata/k8s_backup
    dt=$(date "+%F/%T")
    cmd_history_file="/usr/local/limikeji/bin/cmd_history.txt"
    
    #  先处理有命名空间的
    kubectl  api-resources   |grep true  |awk 'BEGIN {OFS=" "; FIELDWIDTHS="34 13 31 13 50"}{if (NR >1)print $5,$1,$4,$3}' |while read kind name has_namespace group ; do 
            #echo "$kind $name $has_namespace $group"
            api_path="$kind"
            cmd="kubectl  get $api_path --all-namespaces -ocustom-columns=name:.metadata.name,namespace:.metadata.namespace"
            $cmd | awk '{if(NR>1)print $0}' |while read  record_name  ns ; do
                    file="$base_dir/$dt/$ns/$api_path/${record_name}.yml"
                    mkdir -pv $(dirname $file)
                    cmd="kubectl  -n  $ns get  $api_path/$record_name -oyaml "
                    echo $cmd >>$dt_$cmd_history_file
                    $cmd > $file
            done
    done
    
    #  后处理无命名空间的
    kubectl  api-resources   |grep false  |awk 'BEGIN {OFS=" "; FIELDWIDTHS="34 13 31 13 50"}{if (NR >1)print $5,$1,$4,$3}' |while read kind name has_namespace group ; do 
            #echo "$kind $name $has_namespace $group"
            api_path="$kind"
            cmd="kubectl  get $api_path  -ocustom-columns=name:.metadata.name"
            $cmd | awk '{if(NR>1)print $0}' |while read  record_name   ; do
                    file="$base_dir/$dt/NONENAMESPACE/$api_path/${record_name}.yml"
                    mkdir -pv $(dirname $file)
                    cmd="kubectl  get  $api_path/$record_name -oyaml "
                    echo $cmd >>$dt_$cmd_history_file
                    $cmd > $file
            done
    done
    
    
    
    
  • 相关阅读:
    Java的synchronized的同步代码块和同步方法的区别
    关于java字节码框架ASM的学习
    说说cglib动态代理
    Java虚拟机-JVM各种参数配置大全详细
    Permanent Space 和 Heap Space
    OOM三种情况
    Java性能调优(一):调优的流程和程序性能分析
    数学之路-python计算实战(17)-机器视觉-滤波去噪(中值滤波)
    使用 Pascal 脚本编写网页, PWP 项目
    android 4.0主线程訪问网络问题
  • 原文地址:https://www.cnblogs.com/tanxiaojun/p/12006968.html
Copyright © 2011-2022 走看看