Subversion Repositories php-qbpwcf

Rev

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

Rev 146 Rev 148
Line 27... Line 27...
27
說明:
27
說明:
28
註冊服務.
28
註冊服務.
29
 
29
 
30
範例:
30
範例:
31
 
31
 
32
#每次執行 ps auxwf | cat 後,下一秒就刷新畫面重新執行.
32
#註冊 每次執行 ps auxwf | cat 後,下一秒就刷新畫面重新執行 的服務
33
registerService.php --cmds clear --cmds 'ps auxwf | cat'  --cmds 'sleep 1'
33
registerService.php --cmd clear --cmds 'ps auxwf | cat'  --cmds 'sleep 1'
-
 
34
 
-
 
35
#註冊 執行 ssh 安全連線,並透過定期檢查 port 跟 指定指令 來確保服務在線 的服務
-
 
36
registerService.php --cmd "ssh -i /home/liveuser/.ssh/id_ed25519 -N -L 5956:169.254.1.2:22 liveuser@domain" --name secure2liveuser@domain --keepServiceUp yes --checkCmd "echo 'env' | ssh liveuser@domain -p 5956 -i /home/liveuser/.ssh/id_ed25519" --runOnBoot yes --runNow yes --checkListenIp 127.0.0.1:5956/tcp
34
 
37
 
35
備註:
38
備註:
36
目前不支援在 ostree 環境下運行.
39
會被SELINUX預設設定阻擋
37
 
40
 
38
*/
41
*/
39
 
42
 
40
#指派命名空間
43
#指派命名空間
41
namespace qbpwcf;
44
namespace qbpwcf;
Line 173... Line 176...
173
#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
176
#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
174
#$conf["skipableVariableCanNotBeEmpty"]=array("backTime");
177
#$conf["skipableVariableCanNotBeEmpty"]=array("backTime");
175
#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
178
#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
176
$conf["skipableVariableName"]=array("runOnBoot","runNow","keepServiceUp","interval","checkListenIp","checkListenAddr","checkCmd");
179
$conf["skipableVariableName"]=array("runOnBoot","runNow","keepServiceUp","interval","checkListenIp","checkListenAddr","checkCmd");
177
#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
180
#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
178
$conf["skipableVariableType"]=array("array","array","array","array","array","array");
181
$conf["skipableVariableType"]=array("array","array","array","array","array","array","array");
179
#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
182
#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
180
$conf["skipableVarDefaultValue"]=array(array("yes"),array("yes"),null,null,null,null,null);
183
$conf["skipableVarDefaultValue"]=array(array("yes"),array("yes"),null,null,null,null,null);
181
#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
184
#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
182
#$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmpty"]="false";
185
#$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmpty"]="false";
183
#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
186
#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
Line 208... Line 211...
208
	
211
	
209
	#結束執行
212
	#結束執行
210
	exit;
213
	exit;
211
 
214
 
212
	}#if end
215
	}#if end
-
 
216
 
-
 
217
#針對每個要執行的指令字串
-
 
218
foreach($parseArgu["content"]["cmd"] as $index => $cmdStr){
-
 
219
 
-
 
220
	#解析成程式與參數
-
 
221
	#函式說明:
-
 
222
	#將指令字串解析成陣列,方便給予 external::callShell 使用 
-
 
223
	#回傳結果:
-
 
224
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
225
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
-
 
226
	#$result["function"],當前執行的函式名稱.
-
 
227
	#$result["content"],解析好的指令陣列.
-
 
228
	#$result["cmd"],解析好的指令名稱.
-
 
229
	#$result["argus"],解析好的參數陣列.
-
 
230
	#$result["argu"],所使用的參數.
-
 
231
	#必填參數
-
 
232
	#$conf["cmdStr"],字串,要解析的指令字串
-
 
233
	$conf["cmdStr"]=$cmdStr;
-
 
234
	#可省略參數:
-
 
235
	#無.
-
 
236
	#參考資料:
-
 
237
	#無.
-
 
238
	#備註:
-
 
239
	#無.
-
 
240
	$parseCmdString=cmd::parseCmdString($conf);
-
 
241
	unset($conf);
-
 
242
 
-
 
243
	#若執行失敗
-
 
244
	if($parseCmdString["status"]==="false"){
-
 
245
 
-
 
246
		#印出結果
-
 
247
		var_dump($parseCmdString);
-
 
248
		
-
 
249
		#結束執行
-
 
250
		exit;
-
 
251
 
-
 
252
		}#if end
-
 
253
		
-
 
254
	#取得要執行的程式
-
 
255
	$cmds[]=$parseCmdString["cmd"];
-
 
256
	
-
 
257
	#若存在程式對應的參數
-
 
258
	if(isset($parseCmdString["argus"])){
-
 
259
	
-
 
260
		#取得程式對應的參數
-
 
261
		$argus[]=$parseCmdString["argus"];
-
 
262
	
-
 
263
		}#if end
-
 
264
	
-
 
265
	#反之
-
 
266
	else{
-
 
267
	
-
 
268
		#設置無該程式的參數
-
 
269
		$argus[]=null;
213
	
270
	
-
 
271
		}#else end
-
 
272
 
214
#取得指令陣列
273
	}#foreache end
-
 
274
 
215
$cmds=$parseArgu["content"]["cmd"];
275
#取得要執行服務的指令
-
 
276
#$cmds=;
216
 
277
 
217
#取得目標參數
278
#取得目標參數
218
$serviceName=$parseArgu["content"]["name"][0];
279
$serviceName=$parseArgu["content"]["name"][0];
219
 
280
 
220
#取得runOnBoot參數
-
 
221
$runOnBoot=$parseArgu["content"]["runOnBoot"][0];
-
 
222
 
-
 
223
#預設為 false
281
#預設為 false
224
$runOnBoot="false";
282
$runOnBoot="false";
225
 
283
 
226
#如果是 yes
284
#如果 runOnBoot 參數是 yes
227
if($runOnBoot==="yes"){
285
if($parseArgu["content"]["runOnBoot"][0]==="yes"){
228
 
286
 
229
	#轉換為 "true"
287
	#轉換為 "true"
230
	$runOnBoot="true";
288
	$runOnBoot="true";
231
 
289
 
232
	}#if end
290
	}#if end
233
 
291
 
234
#取得runNow參數
-
 
235
$runNow=$parseArgu["content"]["runNow"][0];
-
 
236
 
-
 
237
#預設為 false
292
#預設為 false
238
$runNow="false";
293
$runNow="false";
239
 
294
 
240
#如果是 yes
295
#如果 runNow參數 是 yes
241
if($runNow==="yes"){
296
if($parseArgu["content"]["runNow"][0]==="yes"){
242
 
297
 
243
	#轉換為 "true"
298
	#轉換為 "true"
244
	$runNow="true";
299
	$runNow="true";
245
	
300
	
246
	}#if end
301
	}#if end
247
 
302
 
-
 
303
#預設不用 cmd::keepServiceUp 來確保服務
-
 
304
$keepServiceUp="false";
-
 
305
 
248
#如果有指定 keepServiceUp
306
#如果有指定 keepServiceUp
249
if(isset($parseArgu["content"]["keepServiceUp"][0])){
307
if(isset($parseArgu["content"]["keepServiceUp"][0])){
250
 
308
 
251
	#設定keepServiceUp
309
	#如果參數 keepServiceUp 為 "true"
252
	$keepServiceUp=$parseArgu["content"]["keepServiceUp"][0];
310
	if($parseArgu["content"]["keepServiceUp"][0]==="yes"){
-
 
311
	
-
 
312
		#設置 keepServiceUp 為 "true"
-
 
313
		$keepServiceUp="true";
-
 
314
	
-
 
315
		}#if end
253
 
316
 
254
	}#if end
317
	}#if end
255
 
318
 
256
#如果有指定 interval
319
#如果有指定 interval
257
if(isset($parseArgu["content"]["interval"][0])){
320
if(isset($parseArgu["content"]["interval"][0])){
Line 260... Line 323...
260
	$interval=$parseArgu["content"]["interval"][0];
323
	$interval=$parseArgu["content"]["interval"][0];
261
 
324
 
262
	}#if end
325
	}#if end
263
	
326
	
264
#初始化要檢查的服務名稱
327
#初始化要檢查的服務名稱
265
$checkListen=array("name"=>$conf["name"]);
328
$checkListen[]=array("name"=>$serviceName);
266
	
329
	
267
#如果有指定 checkListenIp
330
#如果有指定 checkListenIp
268
if(isset($parseArgu["content"]["checkListenIp"])){
331
if(isset($parseArgu["content"]["checkListenIp"])){
269
 
332
 
270
	#針對每個 checkListenIp
333
	#針對每個 checkListenIp
Line 294... Line 357...
294
if(isset($parseArgu["content"]["checkCmd"])){
357
if(isset($parseArgu["content"]["checkCmd"])){
295
 
358
 
296
	#針對每個 checkCmd
359
	#針對每個 checkCmd
297
	foreach($parseArgu["content"]["checkCmd"] as $checkCmd){
360
	foreach($parseArgu["content"]["checkCmd"] as $checkCmd){
298
	
361
	
-
 
362
		#另外儲存成指定的格式
-
 
363
		$checkCmd=array("cmd"=>$checkCmd);
-
 
364
	
299
		#記錄用於檢查服務是否在線的指令
365
		#記錄用於檢查服務是否在線的指令
300
		$checkListen[]=array("cmd"=>$checkCmd);
366
		$checkListen[]=array("cmd"=>$checkCmd);
301
	
367
	
302
		}#foreach end
368
		}#foreach end
303
 
369
 
304
	}#if end
370
	}#if end
305
 
371
 
306
#建立暫存檔案
-
 
307
#函式說明:
-
 
308
#於本套件位置底下的tmp資料夾下建立與回傳暫存檔案名稱路徑 
-
 
309
#回傳結果:
-
 
310
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
311
#$result["error"],錯誤訊息.
-
 
312
#$result["function"],當前執行的函數名稱.
-
 
313
#$result["content"],暫存檔案的路徑與名稱.
-
 
314
#$result["fileName"],暫存檔案的名稱.
-
 
315
#$result["path"],暫存檔案的路徑.
-
 
316
#必填參數:
-
 
317
#無.
-
 
318
#可省略參數:
-
 
319
#無.
-
 
320
#參考資料:
-
 
321
#無.
-
 
322
#備註:
-
 
323
#無.
-
 
324
$conf=array();
-
 
325
$createTempFile=fileAccess::createTempFile($conf);
-
 
326
unset($conf);
-
 
327
 
-
 
328
#如果建立暫存檔案失敗
-
 
329
if($createTempFile["status"]==="false"){
-
 
330
 
-
 
331
	#debug
-
 
332
	var_dump($createTempFile);
-
 
333
 
-
 
334
	#結束執行,回傳 shell 1
-
 
335
	exit(1);
-
 
336
 
-
 
337
	}#if end
-
 
338
 
-
 
339
#撰寫要執行的程式內容
-
 
340
#函式說明:
-
 
341
#將多行字串寫入到檔案
-
 
342
#回傳結果:
-
 
343
#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
-
 
344
#$result["error"],錯誤訊息陣列.
-
 
345
#$result["function"],當前執行函數的名稱.
-
 
346
#必填參數:
-
 
347
#$conf["fileName"],字串,爲要編輯的檔案名稱
-
 
348
$conf["fileName"]=$createTempFile["content"];
-
 
349
#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
-
 
350
$conf["inputString"]=$cmds;
-
 
351
#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
-
 
352
$conf["fileArgu"]=__FILE__;
-
 
353
#可省略參數:
-
 
354
#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
-
 
355
#參考資料:
-
 
356
#無.
-
 
357
#備註:
-
 
358
#無.
-
 
359
$writeMultiLine=fileAccess::writeMultiLine($conf);
-
 
360
unset($conf);
-
 
361
 
-
 
362
#如果建立檔案失敗
-
 
363
if($writeMultiLine["status"]==="false"){
-
 
364
 
-
 
365
	#debug
-
 
366
	var_dump($writeMultiLine);
-
 
367
 
-
 
368
	#結束執行,回傳 shell 1
-
 
369
	exit(1);
-
 
370
 
-
 
371
	}#if end
-
 
372
 
-
 
373
#path of bin for systemctl 
-
 
374
$pathOfBinForSystemctl="/var/qbpwcf/bin_for_systemctl/";
-
 
375
 
-
 
376
#service path
-
 
377
$servicePath=$pathOfBinForSystemctl.$serviceName.".sh";
-
 
378
 
-
 
379
#移動程式到 /var/qbpwcf/bin_for_systemctl/ 底下
-
 
380
#函式說明:
-
 
381
#移動檔案
-
 
382
#回傳結果:
-
 
383
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
384
#$result["function"],當前執行的函數名稱
-
 
385
#$result["error"],錯誤訊息.
-
 
386
#$result["content"],檔案輸出後的位置與名稱.
-
 
387
#必填參數:
-
 
388
#$conf["from"],字串,要移動的檔案名稱與位置.
-
 
389
$conf["from"]=$createTempFile["content"];
-
 
390
#$conf["to"],字串,要移動到的位置與名稱
-
 
391
$conf["to"]=$servicePath;
-
 
392
#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
-
 
393
$conf["fileArgu"]=__FILE__;
-
 
394
#可省略參數:
-
 
395
#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
-
 
396
#$conf["commentsArray"]=array("");
-
 
397
#參考資料:
-
 
398
#無.
-
 
399
#備註:
-
 
400
#無.
-
 
401
$mv=fileAccess::mv($conf);
-
 
402
unset($conf);
-
 
403
 
-
 
404
#如果移動檔案失敗
-
 
405
if($mv["status"]==="false"){
-
 
406
 
-
 
407
	#debug
-
 
408
	var_dump($mv);
-
 
409
 
-
 
410
	#結束執行,回傳 shell 1
-
 
411
	exit(1);
-
 
412
 
-
 
413
	}#if end
-
 
414
 
-
 
415
#函式說明:
372
#函式說明:
416
#將要執行的程式變成透過 systemd 來運行.
373
#將要執行的程式變成透過 systemd 來運行.
417
#回傳結果:
374
#回傳結果:
418
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
375
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
419
#$result["error"],錯誤訊息.
376
#$result["error"],錯誤訊息.
Line 423... Line 380...
423
#必填參數:
380
#必填參數:
424
#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
381
#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
425
$conf["fileArgu"]=__FILE__;
382
$conf["fileArgu"]=__FILE__;
426
#$conf["name"],字串,服務名稱,實際產生的system名稱會加上".service".
383
#$conf["name"],字串,服務名稱,實際產生的system名稱會加上".service".
427
$conf["name"]=$serviceName;
384
$conf["name"]=$serviceName;
428
#$conf["cmd"],字串,要執行的指令.
385
#$conf["cmds"],字串陣列,每個要執行的程式.
429
$conf["cmd"]=$servicePath;
386
$conf["cmds"]=$cmds;
430
#可省略參數:
387
#可省略參數:
431
#$conf["params"],字串陣列,指令要使用的參數.
388
#$conf["params"],字串陣列,每個程式使用的參數.
432
#$conf["params"]=array("");
389
$conf["params"]=$argus;
433
#$conf["enable"],字串,預設為"true",代表該服務為enable.
390
#$conf["enable"],字串,預設為"true",代表該服務為enable.
434
$conf["enable"]=$runOnBoot;
391
$conf["enable"]=$runOnBoot;
435
#$conf["startNow"],字串,預設為"true",代表該服務要立刻執行.
392
#$conf["startNow"],字串,預設為"true",代表該服務要立刻執行.
436
$conf["startNow"]=$runNow;
393
$conf["startNow"]=$runNow;
437
 
394