当脚本在crontab中运行时ssh命令不起作用vs.手动命令

时间:2019-08-29 16:52:26

标签: bash cron sh

我正在创建一个脚本,该脚本循环遍历服务器名称文件并检查服务器/ app中的可用空间。当我通过命令行运行脚本时,它运行良好。但是,当它通过crontab运行时,没有设置/存储我的主变量($ appData)。

我尝试仅回显SSH命令-它仍然不返回任何信息。

脚本:

#!/bin/sh

inputFile ='/tmp/SpaceMonitoring/serverList.txt'
dos2unix $inputFile



output=/tmp/SpaceMonitoring/Logs/spaceResultsFull.$(date '+%F_%HH').txt

echo -e "Start Script [$(date '+%F %H:%M:%S %Z')] \n \n Local Drives:" > $output


while  read -r line|| [[ -n "$line" ]]; do 

    appText="/app"      
    appData=$(ssh -Aqno "StrictHostKeyChecking=no" $line "df -h | grep ' /app$'")   
    appFree=$(echo $appData | awk '{print $4}')     

    finalResApp=$(echo -e "\t$line \t $appText ($appFree) \n")  

    echo "$finalResApp" >> $output


done < "$inputFile" 

echo -e "\n End Script [$(date '+%F %H:%M:%S %Z')]" >> $output

Crontab:

00 10 * * * /tmp/SpaceMonitoring/checkSpace.sh

通过命令行手动运行输出文件:

Start Script [2019-08-26 15:58:32 EDT] 

    server123    /app (86%)
    server234    /app (4%)

 End Script [2019-08-26 15:59:54 EDT]

通过crontab运行输出文件:

Start Script [2019-08-26 15:58:32 EDT] 

    server123    /app ()
    server234    /app ()

 End Script [2019-08-26 15:59:54 EDT]

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,在我运行 ssh 命令的 100 台主机中,有 3 台未能始终返回任何数据,但仅在从 cron 运行时才返回。我发现解决方案从默认的 ConnectTimeout(由系统设置)增加。在我的情况下,我将其设置为 30 秒,较低的数字可能会很好。所以对于你的例子,我会这样做

appData=$(ssh -Aqno "StrictHostKeyChecking=no" -o ConnectTimeout=30 $line "df -h | grep ' /app$'")

这确实解决了我遇到的相同问题。