我正在使用 Debian 6.0.6。几天前我编辑了 root crontab 并添加了以下行:
00,10,20,30,40,50 * * * * /root/Scripts/con_switch6.sh >> /var/log/con_switch_diario.log 2>&1
我正在使用 Putty 连接到此 Linux 服务器。同时,Putty 控制台已打开并连接,文件“con_switch_diario.log”内每 10 分钟生成一行(即脚本正在运行)。
但是当我关闭 Putty 控制台(即 ssh 连接已完成)然后重新打开它时,我发现在这段时间内该日志文件上没有任何条目。我进行了一些测试,发现当控制台关闭时,crontab 不会执行该脚本。
脚本的内容如下:
#!/bin/sh
IPcorreo="83.25.10.84"
IP1="192.168.10.125"
IP2="192.168.10.154"
maxPloss="15"
IPfirewall=`traceroute -m 3 $IPcorreo | grep $IP1`
if [ $? -eq 0 ]
then
echo "$IPfirewall: `date`"
ploss=$(ping -q -w30 $IPcorreo | grep -o "[0-9]*%" | tr -d %) > /dev/null 2>&1
if [ "$ploss" -gt "$maxPloss" ]
then
/usr/bin/expect /root/Scripts/delete.exp
sleep 60
echo "Switch Email: `date`" | mail -s System [email protected]
fi
else
traceroute -m 3 $IPcorreo | grep $IP2
fi
我不知道该如何解决这个问题。谢谢你的帮助。
PS:在同一台服务器中,我在 crontab 中定义了其他脚本……它们每天都在正常运行。我发现它们之间的唯一区别是它们使用
#!/bin/bash
代替
#!/bin/sh
但即使我在脚本上将其更改为使用 bash,我仍然遇到同样的问题。
答案1
问题已修复。原因是这一行
ploss=$(ping -q -w30 $IPcorreo | grep -o "[0-9]*%" | tr -d %) > /dev/null 2>&1
一旦我将其改为
ploss=`ping -q -w30 $IPcorreo | grep -o "[0-9]*%" | tr -d %`
一切都开始顺利起来。