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