【发布时间】:2020-01-02 23:56:03
【问题描述】:
我正在创建一个循环遍历服务器名称文件并检查服务器 /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]
【问题讨论】:
-
看看openssh的选项
-n。 -
一般注意事项:从
inputFile =行中删除空格。要调试 cron 作业,请将错误输出重定向到日志文件(并从 ssh 中删除-q选项)。您是否使用ssh-agent身份验证?如果是这样,这将无法从 cron 作业中获得(除非您在该作业中运行代理 );无论如何,我很确定您不想转发代理连接(-A选项)。 -
我已经在此处添加了 -n 变量——我们在服务器上只有 ssh——没有 openssh
-
好的,尝试将
ssh替换为</dev/null ssh。 -
@Cryus /null ssh 仍然没有工作