我正在创建一个脚本,该脚本循环遍历服务器名称文件并检查服务器/ 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]
答案 0 :(得分:0)
我遇到了同样的问题,在我运行 ssh 命令的 100 台主机中,有 3 台未能始终返回任何数据,但仅在从 cron 运行时才返回。我发现解决方案从默认的 ConnectTimeout(由系统设置)增加。在我的情况下,我将其设置为 30 秒,较低的数字可能会很好。所以对于你的例子,我会这样做
appData=$(ssh -Aqno "StrictHostKeyChecking=no" -o ConnectTimeout=30 $line "df -h | grep ' /app$'")
这确实解决了我遇到的相同问题。