欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

crontab定时器执行.sh脚本

程序员文章站 2022-06-09 17:20:39
...

Linux 的crontab,执行shell脚本的时候,异常问题整理

整理的原因是:crontab测试真的太耗费时间了

一、crontab中的脚本不执行,单独执行shell脚本没问题,放crontab中不行

28 15 * * * sh -bx sqoop_startAll.sh create all 2>&1 >> /home/user/sh_starts/logs/sqoop_upload_`date +\%Y\%m\%d`.log

原因是shell脚本需要全路径,这种情况比较好发现并处理。

 

二、crontab中的shell脚本执行了,但是脚本中的脚本没有执行,shell嵌套脚本及脚本调用脚本的情况

#!/bin/bash
## sqoop 读取数据库
echo "sqoop job 执行开始时间: `date '+%Y-%m-%d %H:%M:%S'`"

path=$(cd `dirname $0`;pwd) #获取文件路径
dir=`dirname $path` #获取文件的上一级路径

#不创建job,增量导入,数据库地址没有修改
   [ "$1" = "create" ]; then
        # 删除原来的job
        echo "sqoop job 删除原来job脚本"
        sh $path/sqoopjob_delete.sh 2>&1 | tee -ai /home/user/sh_starts/logs/sqoop_upload_`date +\%Y\%m\%d`.log
        sleep 1s

        #删除原来的表及表数据
        echo "drop sqoop job table 删除原来的表及表数据"
        sh $path/sqoopjob_dropTables.sh 2>&1 | tee -ai /home/user/sh_starts/logs/sqoop_upload_`date +\%Y\%m\%d`.log

        # 创建job
        echo "sqoop 创建新 job "
        sh $path/sqoopjob_create_columns.sh 2>&1 | tee -ai /home/huser/sh_starts/logs/sqoop_upload_`date +\%Y\%m\%d`.log
        sleep 2s
fi

# job执行
echo "sqoop job 执行:$path/sqoopjob_exec.sh"
sh $path/sqoopjob_exec.sh 2>&1 | tee -ai /home/huser/sh_starts/logs/rtdata-sqoop_upload_`date +\%Y\%m\%d`.log
sleep 1s

echo "sqoop job 执行结束时间: `date '+%Y-%m-%d %H:%M:%S'`"

上面文件中的脚本没有执行,原因是各个脚本中的环境变量没有读取到,需要在每个shell脚本中增加设置:

. /etc/profile
. ~/.bash_profile

例如:

#!/bin/bash
#删除sqoop job 的表 drop table
. /etc/profile
. ~/.bash_profile
  
#获取job相关表名称
dir=/home/user/phaseOne
tablesName=`sh $dir/test0703/get_tablesName.sh`

for i in $tablesName
do
        echo "drop table $i;" >>aa.txt
done

tables=`cat aa.txt`
hive -e "use rt1;$tables" 2>&1 | tee -ai /home/user/sh_starts/logs/sqoop_upload_`date +\%Y\%m\%d`.log

rm -f aa.txt

注意每一步shell执行脚本需要增加日志记录,否则查找异常就会很困难,而且报错具体是哪层调用的报错也很难找出来。

 

三、crontab注意点:

crontab定时器执行.sh脚本