使用手表来运行一个shell脚本 – 但脚本失效

所以我想要关注我的networking连接,所以我可以为我的ISP做一个报告。 (好像调制解调器每天约一次约30-60秒)

所以我复制了这个方便的小脚本

http://www.cyberciti.biz/tips/simple-linux-and-unix-system-monitoring-with-ping-command-and-scripts.html

和它一起运行

watch -n 15 ./ping-test.sh 

我一直在testing它通过拉我的调制解调器上的插头。

networking出去后,手表首次运行脚本运行良好(发送一些电子邮件),然后失效。 一旦联网恢复脚本“完成”,然后再运行一遍。

所以我收到的邮件是在networkingclosures的时候,但是没有多久。

如果我直接从命令行运行脚本,它将运行(电子邮件),然后退出。

任何想法为什么? 如何让脚本在networkingclosures后继续运行?

如果ping不能达到目标, ping将会挂起,也可能是脚本因为ping仍在等待回复而失效。 尝试将-w 最后期限-W 超时选项添加到ping

你可以通过使用“ip monitor”来实时做到这一点。 这将输出任何事件,如正在删除的IP地址或添加链接状态从运行切换到断开连接,或以某种方式更改路由。

 ip monitor all >> /some/log.log & 

您必须以追加模式打开。 如果你想让它在terminal外运行,你可以用“disown%1”

如果你也需要时间戳,那么有几种方法。 一个简单的方法是使用inotifywait来检查文件是否得到更新,然后将date追加到它。 这很容易做到上面这个到shell脚本,也许不认为,所以你得到

 ip monitor all >> /some/log.log & while inotifywait -qq -e modify /some/log.log; do sleep 0.2; date >>/root/mon.log; done 

请享用

你用'watch'命令的解决scheme不好。 我会尝试解决这个这样的事情:

 #!/bin/bash HOSTS="foo.bar foo2.bar" COUNT=4 while : do for myHost in $HOSTS do count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }') if [ $count -eq 0 ]; then # 100% failed echo "Host : $myHost is down (ping failed) at $(date)" fi done sleep 15 # here is your refresh rate done 

然后以普通的脚本运行它:./script_name.sh

以CTRL + C结束。

它已经失效,因为它已经完成,但取决于父进程 – watch命令,它仍然存在。

所以我收到的邮件是在networkingclosures的时候,但是没有多久。

该脚本已经打印远程系统closures的date:

echo "Host : $myHost is down (ping failed) at $(date)" | mail -s "$SUBJECT" $EMAILID

如何让脚本在networkingclosures后继续运行?

它用-c 1 ping ,因此在发送1个ECHO_REQUEST包之后它将停止。

把它放在每分钟运行一次:

 */1 * * * * /path/to/your/script