2010-04-11 43 views
4

當我ping一個站點時,它返回「請求超時」。當這臺服務器再次聯機時,我想製作一個小程序來告訴我(聲音嗶嗶聲或類似的東西)。不管用哪種語言。我認爲這應該是非常簡單的腳本與幾行代碼。那麼怎麼寫呢?當站點(服務器)再次聯機時通知我

回答

1

不要忘記通知聲音,如回聲「^ G」!只要是不同的 - 這裏的Windows批處理:

C:\> more pingnotify.bat 
:AGAIN 
ping -n 1 %1% 
IF ERRORLEVEL 1 GOTO AGAIN 
sndrec32 /play /close "C:\Windows\Media\Notify.wav" 

C:\> pingnotify.bat localhost 

:)

3

平的一些實施方案允許您爲數據包的收到後退出指定條件:

在Mac OS X,使用ping -a -o $the_host

  • ping會繼續努力(默認)
  • -a表示收到數據包時發出嘟嘟聲
  • -o表示收到數據包時退出

在Linux(Ubuntu的至少),使用ping -a -c 1 -w inf $the_host

  • -a裝置蜂鳴當接收到分組
  • -c 1指定出口之前發送的分組的數量(在這種情況下1)
  • -w inf指定無論什麼時候ping退出的最後期限(本例中爲無限)
  • -c-w一起使用,-c變得出口之前的數據包的數目接收

要麼可以鏈接到執行您下一個命令,例如儘快ssh登錄到服務器,因爲它涉及了(帶之間的縫隙,使sshd真正啓動):

# ping -a -o $the_host && sleep 3 && ssh $the_host 
+2

是'-o'標準的選擇嗎?我在Linux或Windows上沒有看到它 – 2010-04-11 02:19:53

+0

啊,我的不好。它似乎只在Mac上有用。我想他可以把它包裹起來。 – Stephen 2010-04-11 02:22:24

+0

確認'-o'在Linux上不可用。太糟糕了,對於這個用途來說非常方便。 +1無論如何在我的Mac上向我顯示選項。 =) – Arkku 2010-04-11 03:18:37

0

一種方法是運行ping是一個循環,例如

while ! ping -c 1 host; do sleep 1; done 

(如果你想保持安靜,您可以將輸出重定向到/dev/null

在一些系統上,如Mac OS X,ping也可以有選擇-a -o(按另一種答案)可用,這將導致它保持ping狀態直到收到響應。但是,許多(大多數?)Linux系統上的ping沒有-o選項,並且如果網絡返回錯誤,那麼等效的-c 1 -w 0類型仍會退出。

編輯:

while ! nc -w 5 -z host port; do sleep 1; done 

-w 5指定:如果主機不響應ping或者你需要檢查某個端口上服務的可用性,可以在零I/O模式下使用的netcat每個單獨的嘗試都有5秒的超時時間。請注意,使用netcat時,您甚至可以列出多個端口(或端口範圍)以在其中某些端口可用時進行掃描。

編輯2:上面顯示的循環不斷嘗試,直到達到主機(或端口)。在他們後面添加提醒命令,例如嗶嗶聲或彈出一個窗口。