无限循环?检查两台打印机是否联机或脱机 - 如果出现故障则发送电子邮件
Indefinitely Looping ? Check Two Printers if Online or Offline - Send Email if Down
我有这个无限循环的脚本 - 有两台打印机各检查一次 - printer01 和 printer02。如果它们关闭或关闭,则发送电子邮件。
为什么它在第一台 printer01 上无限循环?
#!/bin/ksh
c=1
while [[ $c -le 3 ]]; do
STATUS=$(lpstat -printer0$c| grep 'READY' | awk '{print }')
if [[ ! $STATUS == "DOWN" ||! $STATUS == "OFF" ]] ; then
#create email summary and send
today=`date +%m%d%Y`
echo "*** START EMAIL SUMMARY *** " > /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Date - `date` " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Start time => $s_time " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Current time => `date +%H:%M:%S` " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Printer email message will be here for you to modify " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Please investigate. " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "*** END EMAIL SUMMARY *** " >> /lsf10/monitors/lpstat_email_$today.txt
`mail -s "Mobius Printer Down Alert!" "email1,email2" < /lsf10/monitors/lpstat_email_$today.txt`
fi
c = $c + 1
done
exit
考虑在每个外部命令后添加错误检查。
您可以使用 ksh -x
到 运行 您的脚本来查看您的错误,这会打开调试模式。您也可以通过在脚本中添加 set -x
来完成此操作。
您的脚本正在循环,因为变量 $c 没有按照您的想法设置。
您可能需要检查每个外部命令的退出代码($?),还要检查 lpstat
返回的标准输出是否为空或有任何错误,并验证邮件程序是否已打开路径和可执行文件等
尝试不同的方法,例如:
#!/bin/ksh
typeset +i c=1
while (( c <= 2 )); do
STATUS=$(lpstat -printer0$c| grep 'READY' | awk '{print }')
if [[ ! $STATUS == "DOWN" ||! $STATUS == "OFF" ]] ; then
#create email summary and send
today=`date +%m%d%Y`
outfile=/tmp/lpstat_email_$today.txt # use your own path
echo "*** START EMAIL SUMMARY *** " > ${outfile}
echo "* " >> ${outfile}
echo "* Date - `date` " >> ${outfile}
echo "* " >> ${outfile}
echo "* Start time => $s_time " >> ${outfile}
echo "* Current time => `date +%H:%M:%S` " >> ${outfile}
echo "* " >> ${outfile}
echo "* Printer email message will be here for you to modify " >> ${outfile}
echo "* Please investigate. " >> ${outfile}
echo "* " >> ${outfile}
echo "*** END EMAIL SUMMARY *** " >> ${outfile}
`mail -s "Mobius Printer Down Alert!" "email1,email2" < ${outfile}`
fi
let c=$(( c + 1 ))
done
exit
我有这个无限循环的脚本 - 有两台打印机各检查一次 - printer01 和 printer02。如果它们关闭或关闭,则发送电子邮件。 为什么它在第一台 printer01 上无限循环?
#!/bin/ksh
c=1
while [[ $c -le 3 ]]; do
STATUS=$(lpstat -printer0$c| grep 'READY' | awk '{print }')
if [[ ! $STATUS == "DOWN" ||! $STATUS == "OFF" ]] ; then
#create email summary and send
today=`date +%m%d%Y`
echo "*** START EMAIL SUMMARY *** " > /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Date - `date` " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Start time => $s_time " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Current time => `date +%H:%M:%S` " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Printer email message will be here for you to modify " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* Please investigate. " >> /lsf10/monitors/lpstat_email_$today.txt
echo "* " >> /lsf10/monitors/lpstat_email_$today.txt
echo "*** END EMAIL SUMMARY *** " >> /lsf10/monitors/lpstat_email_$today.txt
`mail -s "Mobius Printer Down Alert!" "email1,email2" < /lsf10/monitors/lpstat_email_$today.txt`
fi
c = $c + 1
done
exit
考虑在每个外部命令后添加错误检查。
您可以使用 ksh -x
到 运行 您的脚本来查看您的错误,这会打开调试模式。您也可以通过在脚本中添加 set -x
来完成此操作。
您的脚本正在循环,因为变量 $c 没有按照您的想法设置。
您可能需要检查每个外部命令的退出代码($?),还要检查 lpstat
返回的标准输出是否为空或有任何错误,并验证邮件程序是否已打开路径和可执行文件等
尝试不同的方法,例如:
#!/bin/ksh
typeset +i c=1
while (( c <= 2 )); do
STATUS=$(lpstat -printer0$c| grep 'READY' | awk '{print }')
if [[ ! $STATUS == "DOWN" ||! $STATUS == "OFF" ]] ; then
#create email summary and send
today=`date +%m%d%Y`
outfile=/tmp/lpstat_email_$today.txt # use your own path
echo "*** START EMAIL SUMMARY *** " > ${outfile}
echo "* " >> ${outfile}
echo "* Date - `date` " >> ${outfile}
echo "* " >> ${outfile}
echo "* Start time => $s_time " >> ${outfile}
echo "* Current time => `date +%H:%M:%S` " >> ${outfile}
echo "* " >> ${outfile}
echo "* Printer email message will be here for you to modify " >> ${outfile}
echo "* Please investigate. " >> ${outfile}
echo "* " >> ${outfile}
echo "*** END EMAIL SUMMARY *** " >> ${outfile}
`mail -s "Mobius Printer Down Alert!" "email1,email2" < ${outfile}`
fi
let c=$(( c + 1 ))
done
exit