国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

XYNTService:Windows平臺的開源管理工具

2019-11-04 12:14:52
字體:
來源:轉載
供稿:網友

  在Windows平臺上運行后臺進程需要運行Windows服務。而要運行Windows服務,你就必須有能夠感知Windows服務的程序。Bash腳本無法感知Windows服務,許多控制臺程序同樣也不能。而且,將這些程序轉變為Windows服務也不可行。

  沒有附加的程序,想把控制臺程序作為服務來運行是非常復雜的。Microsoft在其Resource Toolkit產品中提供了一個程序,可以將控制臺程序轉變為Windows服務。但遺憾的是,Resource Toolkit并不是免費的午餐。

  但是,開源程序XYNTService卻為我們提供了一個免費的方案,借助該程序,治理員可以定義執行控制臺程序和及其設置。XYNTService程序是一個Windows服務,它通過讀取設置文件來獲悉執行哪些程序。

  本文摘自最新出版的“Open Source For Windows Administrators”一書。在Code PRoject網站可以下載XYNTService程序(用戶下載源代碼和程序時需要進行注冊)。

  下載的壓縮包內包含一個名為XYNTService.exe的可執行文件。將此文件復制到預備作為XYNTService程序目錄的目錄內,然后執行XYNTService.exe -i命令即可安裝該服務。執行XYNTService.exe –u可移除該服務。

  當作為Windows服務安裝XYNTService程序時,切記要以特定的用戶來運行該服務。因為一些控制臺程序可能需要讀取用戶環境變量或文件,而本地系統帳戶不具備這些屬性。

  在啟動XYNTService時,程序會在其所在的目錄內查找XYNTService.ini文件。下面是配置文件的一個實例:



[Settings]
ServiceName = XYNTService
ProcCount = 2
CheckProcess = 30
[Process0]
CommandLine =
c:/bin/unison.exe -socket 8118
WorkingDir = c:/
PauseStart = 1000
PauseEnd = 1000
UserInterface = No
Restart = Yes
[Process1]
CommandLine = C:/j2sdk1.4.1
05/bin/java.exe -ms1m -cp . scache
WorkingDir = c:/bin/scache
PauseStart = 1000
PauseEnd = 1000
UserInterface = No
Restart = Yes


  在上面的配置文件實例中,有兩個主要的類型區域:Settings和其它區域(Process0和Process1)。Settings區域涵蓋有關XYNTService程序的所有主要的全局定義。其它區域則定義XYNTService運行時啟動的每個進程。Settings區域設置項目如下:

  ServiceName:用來設置XYNTService服務的名稱。通過修改此名稱,治理員可以安裝多個XYNTService服務。

  ProcCount:設定啟動進程的數目。該項設置主要針對XYNTService程序,依據該值來確定處理ProcessX部分的最大進程數。在本例中,該值為2,表示Process0和Process1部分必然存在。

  CheckProcess:該值指定XYNTService檢查啟動進程是否處于活動狀態的時間間隔。假如該值為0,則表示不檢查;為其它值時,進程會被重啟。假如該值有效并且ProcessX區域的Restart項設置為答應重啟,當發生進程死亡時,XYNTService將重新啟動該進程。請謹慎設置該選項,因為假如設置不正確,進程將不停的死亡和重啟,從而可能導致計算機根本無法工作。

  每個進程都對應著一個Process[n]區域,在本例中包括Process0和Process1兩個區域。每個進程設置區域包含如下定義項:


  CommandLine:定義啟動該進程所執行的命令行。切記要使用完整路徑。

  WorkingDir:定義啟動進程的工作目錄。

  PauseStart:指定XYNTService服務在啟動當前進程后暫停的時間(以毫秒為單位)。對于XYNTService服務來說,所有的動作就是等待設定的時間長度,然后才開始啟動下一個進程。

  PauseEnd:指定強制終止進程前的等待時間(以毫秒為單位)。當XYNTService關閉時,它會向進程發送退出消息,而PauseEnd值就是設定XYNTService在發送退出消息之后所等待的時間。在等待時間結束后,進程會被強行關閉。

  UserInterface:指定XYNTService創建的進程是否可與登陸用戶互動。而這僅在本地系統帳戶下時才起作用。請注重,當使用本地系統帳戶時,My Documents目錄是不存在的,對于一些假定My Documents目錄存在的控制臺程序,這將導致一些問題。

  Restart:指定在進程死亡時是否重啟該進程。

  重啟進程

  當在XYNTService中運行腳本時,你可能會碰到問題。例如,一個腳本運行了另外一個進程,它在等待結束該進程。當SYNTService關閉時,它會發送WM QUIT消息。Cygwin Bash shell無法捕捉該WM QUIT消息,所以該shell將會被強行終止。

  當XYNTService再次啟動時,老進程卻已經在運行了。無法捕捉WM QUIT消息的問題不僅存在于Bash shell中,Windows批處理進程也同樣有類似的問題。

  解決方法是修改腳本,以便在啟動新進程前停止所有已運行的老進程。下面的腳本說明如何發現老進程,并且使用PSTools來停止它們:

#!/bin/bash
pslist grep $procIdentifier
awk '{print $2}' > /tmp/pids.txt
exec 3<&0
exec < /tmp/pids.txt
while read line
do
pskill $line
done
exec <&3
exec 3<&-
rm /tmp/pids.txt


  該腳本通過pslist命令列出所有正在運行的進程。進而在結果集合中,使用grep命令搜索$procIdentifier變量所標識的進程ID。搜索到的結果隨后被awk命令處理,進而得到進程ID。


  得到的進程ID被保存在pids.txt文件中,該文件隨后會被加載和重寫。每次重寫都包含所發現的、需要使用pskill命令停止的、進程的ID。最后,pids.txt文件被刪除。

  上面的腳本代碼可以確保停止老進程。你還可以使用kill命令發送一個特定的信號。請注重,PauseStart項應該指定停止已有進程所需的時間。

  重啟服務和XYNTService

  XYNTService可執行程序不僅是一個可執行的Windows服務,它還是一個可以本地啟動和停止服務,以及重啟特定XYNTService服務的控制程序。要重啟本例中ProcessX區域中的第二個進程,可執行如下命令:

  XYNTService.exe -b 2


  執行以下命令可以停止名為Apache的服務:

  XYNTService -k Apache


  執行以下命令可以運行名為Apache的服務:

  XYNTService -r Apache




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 佛坪县| 寿光市| 应用必备| 宁夏| 石河子市| 莆田市| 汝南县| 凤山市| 浙江省| 青岛市| 安龙县| 泽普县| 阿勒泰市| 利辛县| 虎林市| 渭源县| 金昌市| 洛宁县| 怀远县| 临泽县| 洞口县| 永定县| 陕西省| 安徽省| 眉山市| 收藏| 房产| 河北区| 南京市| 永州市| 福建省| 林甸县| 韩城市| 信阳市| 许昌县| 松滋市| 华容县| 庆城县| 堆龙德庆县| 乐清市| 旌德县|