2016-09-15 55 views
0

我必須在我的公司解決一個問題,那就是我們使用基於Raspberry(樹莓派)的Raspberry Pi機器來遠程連接到Windows 7機器並從那裏開始工作。問題是,所有易於使用,免費的基於unix的rdesktop應用程序都無法處理斷開連接。他們凍結了,「不那麼有天賦」的員工不知道如何停止rdesktop並重新連接。編寫一個在後臺運行的bash文件並檢查連接?

我需要編寫一些東西,最好是一個bash應用程序,它可以在Raspberry的後臺運行並檢查連接。如果連接斷開,它應該終止rdesktop並在連接恢復時啓動一個新的連接。我不知道從哪裏開始,因爲雖然我發現了一些例子,但他們都使用ping來檢查連接,但是我的老闆說所有的Raspberries都會一直髮送ping數據包,這會使我們的網關過載。有沒有辦法檢查連接沒有ping?

+1

這聽起來像你想要一個小patc h以避免遇到更大的問題。我建議你找到一種方法來確保這樣的問題不會發生,而不是清理造成的混亂。 – x13

+0

那麼,你是對的,它不應該斷開,永遠。但有時會發生,即使我們修復了連接。 – Drake

+1

我同意@ThisNameBetterBeAvailable。但是,如果您需要使用bash腳本的快速解決方案,我會定期ping,例如每15-30秒一個數據包以避免氾濫 –

回答

0

解決這個問題的一種方法是創建一個連續檢查與主機連接的守護進程。

這樣做,這樣涉及創建兩個文件

  • 其中執行ping主機的腳本/usr/local/bin/checkconnection.sh
  • 守護程序文件/etc/init.d/checkconnectiond

創建守護進程文件:
$ sudo touch /etc/init.d/checkconnectiond $ sudo nano /etc/init.d/checkconnectiond

並粘貼以下:

# !/bin/sh 
# /etc/init.d/checkconnectiond 

### BEGIN INIT INFO 
# Provides:    checkconnectiond 
# Required-Start:  $remote_fs $syslog 
# Required-Stop:  $remote_fs $syslog 
# Default-Start:  2 3 4 5 
# Default-Stop:   0 1 6 
# Short-Description: Script for checking connection for remote desktop 
# Description:   Script for checking connection for remote desktop 
### END INIT INFO 

case "$1" in 
    start) 
     while sleep 30; do (/usr/local/bin/checkconnection.sh &) ; done 
     ;; 
    stop) 
     killall checkconnectiond -q 
     ;; 
    *) 
     echo "Usage: /etc/init.d/checkconnectiond {start|stop}" 
     exit 1 
     ;; 
esac 

exit 0 

創建腳本:

$ sudo nano /usr/local/bin/checkconnection.sh

腳本:

if ping -c 1 host_ip &> /dev/null 
then 
    # do nothing, host is up 
else 
    killall remotedesktop-pid 
fi 

記住要改變host_ipremotedesktop-pid。您可以使用killall時使用的進程名,因此,如果它被稱爲「RDP」你可以做killall rdp

現在我們得到了一個守護進程啓動樹莓時將自動啓動。該守護進程每30秒運行一次checkconnection.shcheckconnection.sh腳本對主機運行ping命令。如果ping不成功,則會終止遠程桌面進程,因此用戶必須手動重新啓動它。

來源:

相關問題