2016-08-03 124 views
0

所以,我有以下腳本:獲取正在運行的進程的在bash輸出

#!/bin/bash 

# IP address to cycle through (in order of priority) 
ip=("192.168.20.102" "192.168.20.103") 

# Check if synergy is already connected 
if pgrep "synergyc"; then 
    # Synergy already connected 
    echo "Synergy is already running." 
else 
    for i in "${ip[@]}" 
    do 
    # Ping ip and connect if successful 
    ping -c 1 -t 1 "$i" && /usr/bin/synergyc -n media -f "$i" 
    echo "Synergy connected to ${i}"; 
    done 
fi 

其中就完事了其運行的cron和一旦ip可用它連接。如果兩者都可用,則根據數組的順序進行連接。

問題是,如果它連接到ip並且該ip變得不可用,則該進程只會掛起以下輸出。

[2016-08-03T22:04:53] NOTE: connecting to '192.168.20.102': 192.168.20.102:24800 
[2016-08-03T22:04:53] WARNING: failed to connect to server: Connection refused 
[2016-08-03T22:04:54] NOTE: connecting to '192.168.20.102': 192.168.20.102:24800 
[2016-08-03T22:04:54] WARNING: failed to connect to server: Connection refused 

我希望能夠做的就是以某種方式捕獲輸出檢查如果它包含文本WARNINGConnection refused等,並killall synergyc根據是否存在該文本和推測的cron正常。

所以最終的目標我想synergyc連接到第一個可用的ip還要殺死自己如果ip變得無法使用,並恢復尋找下一個可用的ip

這個腳本的目的是我們有一個媒體中心在家運行,我們使用兩臺筆記本電腦作爲遙控器唯一的協同作用只能有一個服務器與多個客戶端,而不是其他輪,因此需要這個腳本,只是試圖傳達這不是一個xy問題。

回答

0

您可以嘗試使用--no-restart選項運行synergyc。手冊頁說:

--no重啓不要嘗試,如果由於某種原因失敗

那麼,如果客戶死亡for循環將繼續與下一個IP重新啓動客戶端。

+0

完美謝謝! –

相關問題