讓Unix服務器運行結果異地顯示
在現實工作中,系統工程師往往會遇到企業員工各種各樣的需求。前段時間,就有企業向筆者提出,要求某個應用程序在服務器上運行,但是結果卻要在異地的客戶端上顯示。如下圖所示,員工可以通過網絡向Unix服務器的某個應用軟件發送相關的參數。然后服務器利用這個軟件進行相關的計算與處理。等到有結果后,再把相關的結果發送到客戶端。如有些應用軟件可能計算分析的時間比較長,員工無法在那邊等待結果。為此他們就希望服務器把結果運算出來后就直接返回到他們的客戶端,他們就可以不用在服務器旁邊等著出結果了。
一、通過X客戶端來解決這個需求。
在Unix操作系統中提供了一個叫做X客戶端的程序。它本來是一個仿Windows的管理環境,但是功能卻比其要強的多。如其在網絡上運行就比Windows系統要出色的多。為什么這么說呢?這主要是因為X客戶端程序可以在一個終端上運行一個客戶端程序,而在另一個終端上輸出它的運行結果。也就是說,X客戶端程序可以讓應用軟件的計算結果重定向到另外一個客戶端中。這對于控制運行結果的顯示具有非常大的作用。如通過這個X客戶端程序,本文一開始提到的用戶需求就引刃而解了。
那么該如何實現呢?一般情況下,需要在客戶端與服務器端分別進行設置。下面筆者就對這些設置過程進行詳細的闡述,以幫助大家以后有需要時能夠參考這篇文章順利實現這個配置。
二、接收客戶端的相關配置。
假設現在有一個復雜的密碼破解器。由于版權、安全或者服務器性能方面的限制,其只能夠運行在一臺特定的主機上面。其他員工需要使用這個軟件的話,必須到這個服務器上去運行。但是由于運行的時間比較長,為此員工也不可能在服務器旁邊等待。為此就必須在一個遠程計算機上運行這個客戶端程序,然后把結果返回到本地的主機上。但是并不是所有的主機都可以接受到這個結果。如果有些員工搞惡作劇,把一些不雅的內容通過這個X客戶端重續輸出到所有的本地電腦上,那么就會引起員工的不滿。為此系統工程師必須先在本地客戶端上進行設置,讓其允許接收來自于其他主機的輸出結果。
也就是說本地服務程序必須允許其他的計算機在本地的顯示終端上輸出結果。要實現這個目的的話,就需要采用xhost命令。如可以在本地客戶端上運行xhost +server1命令。就表示運行主機名字為server1的上的任何用戶都可以往這臺客戶端上輸出運行結果。注意,客戶端在判斷是否允許其他主機往本機上輸出運行結果,其標準是主機的名字,而不是用戶名。如允許server1主機向本地輸出結果的話,則如果這臺主機上設置有20個用戶名,則都允許其向本機輸出結果。這一點系統工程師在具體配置的時候,一定要注意。另外如果采用xhost +命令,即沒有在+號后面跟主機名字的話,則表示允許任何遠程機器往這臺主機上輸出運行結果。如果以后要取消這個設置的話也很簡單,如只需要采用xhost –命令就可以取消相關的設置。
三、在遠程機器上設置輸出的目標。
在客戶端設置允許接收遠程機器的輸出結果之后,還需要在遠程機器上使用重定向功能把客戶端程序的運行結果輸出到另一個終端屏幕上。要實現這個需求的話,方法還是比較多的。筆者在這里介紹最常用的幾種方法。
1、如果只有某個特定的客戶端程序需要把運行結果輸出到其它主機的屏幕上,則筆者建議在客戶端程序那邊使用-display選項。在Unix服務器中每個X客戶端程序都有這個選項。這個可選項的參數是完整的顯示名稱。如假設現在需要把名字為passwdpk的應用程序結果重定向到其他客戶端的屏幕上,則可以利用passwdpk –display 顯示的客戶端主機名:終端參數(終端參數的格式為服務器號.屏幕號)。如此的話,這臺主機就會自動把passwdpk的運行結果傳輸到遠程的主機上去。不過需要注意的是,這個可選項只對當前運行的passwdpk應用程序有效。這是什么意思呢?假設現在有四個程序在運行,那么此時操作系統只會把passwdpk應用程序的結果重定向到遠程的客戶端(假設只有這個程序在運行的時候采用了-display可選項),而其他應用程序的結果仍然顯示在這臺主機上。如果系統工程師希望所有程序的運行結果都輸出到特定的客戶端上,那么就需要在啟動每個應用程序的時候都帶上這個可選項。顯然當應用程序比較多的時候,這會比較麻煩。為此如果系統工程師有很多客戶端程序需要在遠程計算機上運行而它們的運行結果都需要輸出到本地的終端上,那么最好使用第二種方法,即設置display環境變量來實現。
2、如果有很多客戶端程序需要在遠程計算機上運行而它們的運行結果都需要輸出到本地的終端時,則最好采用設置display環境變量的方式來實現。這主要是因為環境變量設置后,對其下面的所有應用程序都有效。除非應用程序在啟動的時候采用了-display這個可選項修改了覆蓋了display這個值。Display是Unix操作系統中外殼程序中的一個變量。X客戶端程序在輸出運行結果時,會根據這個變量中設置的值把結果輸出到特定的地方。默認情況下是本地的終端。如果要重定向到其他的遠程客戶端上,系統工程師就需要設置這個值。如系統工程師可以登錄到server1服務器上(通過本地登陸或者遠程登陸),定義或者修改display環境變量的值。這個賦值的格式與上面display可選項的格式相同,都采用主機名:服務器號.屏幕號的形式。這里的主機名字可以利用主機名字對應的IP地址來表示。如果系統工程師知道主機IP地址的話,那么筆者建議還是采用主機IP地址為好。因為這里如果提供主機名字的話,則Unix操作系統還需要利用本地的HOST文件或者DNS服務器來進行主機名字解析。如果萬一DNS或者HOST文件沒有這個主機名字記錄的話,則其中間解析的過程需要一段不短的時間,會影響輸出結果重定向的及時性。故筆者在工作中希望采用IP地址而不是主機名字。如此設置以后,在遠程計算機上執行某個程序,而這個程序的結果卻會顯示在本地的終端上。特別讓我們興奮的是,X客戶端程序允許我們使用本地的鍵盤控制遠程的客戶端程序。這主要是因為鍵盤是服務程序的一個必不可少的部分。
四、該方案的注意點。
在使用這個方案的時候,筆者對各位讀者有兩個善意的提醒。
首先,如果display變量與-display可選項并存的話,需要注意兩者之間的關系。如系統工程師先利用設置display變量的形式把應用程序的結果輸出到遠程終端屏幕上,然后再啟動某個應用程序的時候加入了-display可選項,讓這個應用程序的結果輸出到本地。那么后面采用的這個可選項的值會覆蓋前面的環境變量的值。也就是說,后面啟動的應用程序其輸出結果會在本地顯示,而其他沒有帶可選項的應用程序其結果則在遠程客戶端上(display環境變量設置的地方)顯示。
其次在什么時候使用可選項來實現,而什么時候采用環境變量來設置呢?根據筆者點經驗,主要是看有多少客戶端程序要重定向輸出結果?如果這個需要重定向輸出結果的客戶端程序比較多的話,那么最好通過設置環境變量來實現。此時如果利用可選項來實現的話,每個應用程序啟動時都要加入這個選項。相反如果只是個別應用程序需要重定向的話,則可以通過可選項來實現。另外也可以向上面所說的,先設置環境變量,然后對于個別應用程序設置可選項,利用其覆蓋的特性來靈活的管理應用程序的輸出結果。
最后需要明確的是,其使用效果還受到網絡帶寬的影響。為此如果通過互聯網來進行連接的話,則這個輸出結果重定向功能需要慎用。因為很有可能因為網絡的擁塞或者延遲導致數據的丟失。此時對于系統工程師來說可能就是得不償失了。
