让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环境变量设置的地方)显示。
其次在什么时候使用可选项来实现,而什么时候采用环境变量来设置呢?根据笔者点经验,主要是看有多少客户端程序要重定向输出结果?如果这个需要重定向输出结果的客户端程序比较多的话,那么最好通过设置环境变量来实现。此时如果利用可选项来实现的话,每个应用程序启动时都要加入这个选项。相反如果只是个别应用程序需要重定向的话,则可以通过可选项来实现。另外也可以向上面所说的,先设置环境变量,然后对于个别应用程序设置可选项,利用其覆盖的特性来灵活的管理应用程序的输出结果。
最后需要明确的是,其使用效果还受到网络带宽的影响。为此如果通过互联网来进行连接的话,则这个输出结果重定向功能需要慎用。因为很有可能因为网络的拥塞或者延迟导致数据的丢失。此时对于系统工程师来说可能就是得不偿失了。
