Subversion Repositories php-qbpwcf

Rev

Rev 130 | Rev 146 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 130 Rev 140
Line 25951... Line 25951...
25951
	#可省略參數:
25951
	#可省略參數:
25952
	#$conf["username"],字串,要用什麼使用者來執行,預設為root使用者
25952
	#$conf["username"],字串,要用什麼使用者來執行,預設為root使用者
25953
	#$conf["username"]="";
25953
	#$conf["username"]="";
25954
	#$conf["password"],字串,使用者的密碼,預設不使用.
25954
	#$conf["password"],字串,使用者的密碼,預設不使用.
25955
	#$conf["password"]="";
25955
	#$conf["password"]="";
25956
	#$conf["checkListen"],陣列,用來判斷服務是否有正確啟動的條件,一個元素代表,其中要有一個socket info符合之,若元素的key為"ip",則其數值為[ipv4/ipv6]:port/protocol(tcp/udp);若元素的key為"addr",則其數值為unix domain socket 的位置與名稱;若元素的key為"name",則其數值為程序名稱.
25956
	#$conf["checkListen"],陣列,用來判斷服務是否有正確啟動的條件,一個元素代表,其中要有一個socket info符合之,若元素的key為"ip",則其數值為[ipv4/ipv6]:port/protocol(tcp/udp);若元素的key為"addr",則其數值為unix domain socket 的位置與名稱;若元素的key為"name",則其數值為程序名稱;若元素的key為"cmd",則其數值為一陣列,該陣列的key有cmd,其value為要執行的指令,另外一個key為timeout,其value為秒數,預設為10秒,代表指令於10秒內結束為正常,反之為異常.
25957
	#$conf["checkListen"]=array(array("ip"=>169.254.1.1:443/tcp,"addr"=>/usr/lib/qbpwcf/qbpwcf-usock.sock,"name"=>"addr"),"name"=>"httpd");
25957
	#$conf["checkListen"]=array(array("ip"=>169.254.1.1:443/tcp,"addr"=>/usr/lib/qbpwcf/qbpwcf-usock.sock,"name"=>"addr"),"name"=>"httpd",array("cmd"=>"ps auxwf | cat","timeout"=>"10"));
25958
	#$conf["interval"],字串,檢查沒問題後,要多少秒後再檢查一次,預設為30秒,亦即"30".
25958
	#$conf["interval"],字串,檢查沒問題後,要多少秒後再檢查一次,預設為30秒,亦即"30".
25959
	#$conf["interval"]="30";
25959
	#$conf["interval"]="30";
25960
	#$conf["reportOnly"],字串,"true"代表不「啟動/重新啟動」服務,只是輸出訊息表示服務有正常或需要處理;預設為"false"代表直接「啟動/重新啟動」.
25960
	#$conf["reportOnly"],字串,"true"代表不「啟動/重新啟動」服務,只是輸出訊息表示服務有正常或需要處理;預設為"false"代表直接「啟動/重新啟動」.
25961
	#$conf["reportOnly"]="true";
25961
	#$conf["reportOnly"]="true";
25962
	#$conf["verbose"],字串,預設為"false",若為"true"則會印出過程訊息.
25962
	#$conf["verbose"],字串,預設為"false",若為"true"則會印出過程訊息.
Line 26289... Line 26289...
26289
						#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
26289
						#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
26290
						#$conf["canNotBeEmpty"]=array();
26290
						#$conf["canNotBeEmpty"]=array();
26291
						#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
26291
						#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
26292
						#$conf["canBeEmpty"]=array();
26292
						#$conf["canBeEmpty"]=array();
26293
						#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
26293
						#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
26294
						$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("ip","addr","name");
26294
						$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("ip","addr","name","cmd");
26295
						#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
26295
						#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
26296
						$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("ip","addr","name");
26296
						$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("ip","addr","name","cmd");
26297
						#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
26297
						#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
26298
						$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
26298
						$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","array");
26299
						#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
26299
						#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
26300
						$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null);
26300
						$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,null,null);
26301
						#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
26301
						#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
26302
						$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmpty"]="false";
26302
						$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmpty"]="false";
26303
						#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
26303
						#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
26304
						$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmptyArray"]="false";
26304
						$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmptyArray"]="false";
26305
						#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
26305
						#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
Line 27136... Line 27136...
27136
							
27136
							
27137
								#如果只要 Report
27137
								#如果只要 Report
27138
								if($conf["reportOnly"]==="true"){
27138
								if($conf["reportOnly"]==="true"){
27139
								
27139
								
27140
									#輸出
27140
									#輸出
27141
									echo "service ".$conf["name"]." need to restart!".PHP_EOL;;
27141
									echo "service ".$conf["name"]." need to restart!".PHP_EOL;
27142
									
27142
									
27143
									#下一輪
27143
									#下一輪
27144
									continue;
27144
									continue;
27145
								
27145
								
27146
									}#if end
27146
									}#if end
Line 27190... Line 27190...
27190
							
27190
							
27191
								}#if end
27191
								}#if end
27192
								
27192
								
27193
							}#if end
27193
							}#if end
27194
					
27194
					
-
 
27195
						#如果有指定 cmd
-
 
27196
						if(isset($checkListen["cmd"])){
-
 
27197
						
-
 
27198
							#檢查參數
-
 
27199
							#函式說明:
-
 
27200
							#檢查必填與可省略參數,可省略參數可指定預設要給與什麼數值內容。
-
 
27201
							#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
27202
							#$reuslt["error"],執行不正常結束的錯訊息陣列.
-
 
27203
							#$result["function"],當前執行的函式名稱.
-
 
27204
							#$result["argu"],設置給予的參數.
-
 
27205
							#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
-
 
27206
							#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
-
 
27207
							#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
-
 
27208
							#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
-
 
27209
							#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
-
 
27210
							#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
-
 
27211
							#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
-
 
27212
							#$result["notNeedVar"],字串陣列,多餘的參數名稱.
-
 
27213
							#必填寫的參數:
-
 
27214
							#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
-
 
27215
							$conf["variableCheck::checkArguments"]["varInput"]=&$checkListen["cmd"];
-
 
27216
							#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
-
 
27217
							$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
-
 
27218
							#可以省略的參數:
-
 
27219
							#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
-
 
27220
							$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("cmd");
-
 
27221
							#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
-
 
27222
							$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
-
 
27223
							#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
-
 
27224
							#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
-
 
27225
							#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
-
 
27226
							#$conf["canNotBeEmpty"]=array();
-
 
27227
							#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
-
 
27228
							#$conf["canBeEmpty"]=array();
-
 
27229
							#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
-
 
27230
							$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("timeout");
-
 
27231
							#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
-
 
27232
							$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("timeout");
-
 
27233
							#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
-
 
27234
							$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
-
 
27235
							#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
-
 
27236
							$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("10");
-
 
27237
							#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
-
 
27238
							$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmpty"]="false";
-
 
27239
							#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
-
 
27240
							$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmptyArray"]="false";
-
 
27241
							#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
-
 
27242
							#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
-
 
27243
							#參考資料來源:
-
 
27244
							#array_keys=>http://php.net/manual/en/function.array-keys.php
-
 
27245
							$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
-
 
27246
							unset($conf["variableCheck::checkArguments"]);
-
 
27247
 
-
 
27248
							#如果檢查參數失敗
-
 
27249
							if($checkArguments["status"]==="false"){
-
 
27250
 
-
 
27251
								#設置執行失敗
-
 
27252
								$result["status"]="false";
-
 
27253
 
-
 
27254
								#設置錯誤訊息
-
 
27255
								$result["error"]=$checkArguments;
-
 
27256
 
-
 
27257
								#回傳結果
-
 
27258
								return $result;
-
 
27259
 
-
 
27260
								}#if end
-
 
27261
 
-
 
27262
							#如果檢查參數失敗
-
 
27263
							if($checkArguments["passed"]==="false"){
-
 
27264
 
-
 
27265
								#設置執行失敗
-
 
27266
								$result["status"]="false";
-
 
27267
 
-
 
27268
								#設置錯誤訊息
-
 
27269
								$result["error"]=$checkArguments;
-
 
27270
 
-
 
27271
								#回傳結果
-
 
27272
								return $result;
-
 
27273
 
-
 
27274
								}#if end
-
 
27275
							
-
 
27276
							#預設檢查不通過
-
 
27277
							$pass="false";
-
 
27278
							
-
 
27279
							#透過 proc 運行 cmd,並最多等待 timeout 秒.
-
 
27280
							#函式說明:
-
 
27281
							#透過proc來多執行序運作.
-
 
27282
							#回傳結果:
-
 
27283
							#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
27284
							#$reuslt["error"],執行不正常結束的錯訊息陣列.
-
 
27285
							#$result["function"],當前執行的函式名稱.
-
 
27286
							#$result["argu"],使用的參數.
-
 
27287
							#$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,可透過proc_update函式進行資訊的更新與取得;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
-
 
27288
							#必填參數:
-
 
27289
							#$conf["cmds"],字串陣列,每個元素代表單一程序要執行的指令與參數.
-
 
27290
							$conf["threads::proc"]["cmds"]=array($checkListen["cmd"]["cmd"]);
-
 
27291
							#可省略參數:
-
 
27292
							#$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
-
 
27293
							$conf["threads::proc"]["wait"]="false";
-
 
27294
							#$conf["timeout"],字串陣列,每個元素代表單一程序執行的最大等待秒數,超過後將會強迫停止執行,僅當wait參數為"true"時生效.
-
 
27295
							$conf["threads::proc"]["timeout"]=$checkListen["cmd"]["timeout"];
-
 
27296
							#$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
-
 
27297
							#$conf["workingDir"]=array("path");
-
 
27298
							#$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
-
 
27299
							#$conf["envs"]=array(array("key"=>"value"));
-
 
27300
							#$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
-
 
27301
							#$conf["executeBy"]=array("bash");
-
 
27302
							#參考資料:
-
 
27303
							#https://www.php.net/manual/en/function.proc-open.php
-
 
27304
							#https://www.php.net/manual/en/function.proc-get-status.php
-
 
27305
							#備註:
-
 
27306
							#若需要取得當下的執行狀況,請使用 self::proc_update 來更新.
-
 
27307
							$proc=threads::proc($conf["threads::proc"]);
-
 
27308
							unset($conf["threads::proc"]);
-
 
27309
						
-
 
27310
							#如果執行異常
-
 
27311
							if($proc["status"]==="false"){
-
 
27312
 
-
 
27313
								#設置執行失敗
-
 
27314
								$result["status"]="false";
-
 
27315
 
-
 
27316
								#設置錯誤訊息
-
 
27317
								$result["error"]=$proc;
-
 
27318
 
-
 
27319
								#回傳結果
-
 
27320
								return $result;
-
 
27321
 
-
 
27322
								}#if end
-
 
27323
							
-
 
27324
							#如果程序執行異常
-
 
27325
							if($proc["content"][0]["status"]==="false"){
-
 
27326
							
-
 
27327
								#設置執行失敗
-
 
27328
								$result["status"]="false";
-
 
27329
 
-
 
27330
								#設置錯誤訊息
-
 
27331
								$result["error"]=$proc;
-
 
27332
 
-
 
27333
								#回傳結果
-
 
27334
								return $result;
-
 
27335
							
-
 
27336
								}#if end
-
 
27337
								
-
 
27338
							#如果程序結束代碼為0
-
 
27339
							if($proc["content"][0]["statusCode"]==="0"){
-
 
27340
							
-
 
27341
								#設置檢查通過
-
 
27342
								$pass="true";
-
 
27343
							
-
 
27344
								}#if end
-
 
27345
							
-
 
27346
							#如果檢查不通過
-
 
27347
							if($pass==="false"){
-
 
27348
							
-
 
27349
								#提示問題
-
 
27350
								echo "service ".$conf["name"]." process not pass test by commamd(".$checkListen["cmd"]["cmd"].")!".PHP_EOL;
-
 
27351
							
-
 
27352
								#如果只要 Report
-
 
27353
								if($conf["reportOnly"]==="true"){
-
 
27354
								
-
 
27355
									#輸出
-
 
27356
									echo "service ".$conf["name"]." need to restart!".PHP_EOL;;
-
 
27357
									
-
 
27358
									#下一輪
-
 
27359
									continue;
-
 
27360
								
-
 
27361
									}#if end
-
 
27362
							
-
 
27363
								#啟動服務
-
 
27364
								#函式說明:
-
 
27365
								#執行 systemd 程序來管理服務.
-
 
27366
								#回傳結果:
-
 
27367
								#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
27368
								#$result["error"],錯誤訊息.
-
 
27369
								#$result["function"],當前執行的函式名稱.
-
 
27370
								#$result["argu"],所使用的參數.
-
 
27371
								#$result["content"],執行的結果.
-
 
27372
								#$result["content"]["srerviceInfo"]["on"],"true",代表運行中,"false",代表無運行. 
-
 
27373
								#$result["content"]["srerviceInfo"]["auto"],"true",代表自動啟動,"false",代表不自動啟動. 
-
 
27374
								#必填參數:
-
 
27375
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
-
 
27376
								$conf["cmd::systemd"]["fileArgu"]=$conf["fileArgu"];
-
 
27377
								#$conf["name"],字串,服務名稱.
-
 
27378
								$conf["cmd::systemd"]["name"]=$conf["name"];
-
 
27379
								#可省略參數:
-
 
27380
								#$conf["operation"],字串,"enable","disable","start","stop","restart",預設為"list".
-
 
27381
								$conf["cmd::systemd"]["operation"]="start";
-
 
27382
								#$conf["username"],字串,要用什麼使用者來執行,預設為root使用者
-
 
27383
								#$conf["username"]="";
-
 
27384
								#$conf["password"],字串,使用者的密碼,預設不使用.
-
 
27385
								#$conf["password"]="";
-
 
27386
								$systemd=cmd::systemd($conf["cmd::systemd"]);
-
 
27387
								unset($conf["cmd::systemd"]);
-
 
27388
								
-
 
27389
								#若運行出錯
-
 
27390
								if($systemd["status"]==="false"){
-
 
27391
								
-
 
27392
									#設置執行失敗
-
 
27393
									$result["status"]="false";
-
 
27394
 
-
 
27395
									#設置錯誤訊息
-
 
27396
									$result["error"]=$systemd;
-
 
27397
 
-
 
27398
									#回傳結果
-
 
27399
									return $result;
-
 
27400
								
-
 
27401
									}#if end
-
 
27402
							
-
 
27403
								#下一輪
-
 
27404
								continue;
-
 
27405
							
-
 
27406
								}#if end
-
 
27407
							
-
 
27408
							}#if end
-
 
27409
					
27195
						#如果有 verbose
27410
						#如果有 verbose
27196
						if($conf["verbose"]==="true"){
27411
						if($conf["verbose"]==="true"){
27197
						
27412
						
27198
							#提示什麼條件檢查通過
27413
							#提示什麼條件檢查通過
27199
							echo " condition "; 
27414
							echo " condition "; 
Line 27213... Line 27428...
27213
					
27428
					
27214
						}#foreach end
27429
						}#foreach end
27215
					
27430
					
27216
					}#if end
27431
					}#if end
27217
				
27432
				
27218
				}#if end			
27433
				}#if end
27219
			
27434
			
27220
			#過30秒再檢查一次
27435
			#過30秒再檢查一次
27221
			sleep($conf["interval"]);
27436
			sleep($conf["interval"]);
27222
			
27437
			
27223
			#下一輪
27438
			#下一輪