crontab定时器执行.sh脚本

本文总结了Linux crontab在执行shell脚本时可能遇到的问题,包括脚本不执行、嵌套脚本及调用脚本未执行等,并提供了相应的解决方案,如使用全路径、添加日志记录和设置环境变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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注意点:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值