2017-06-15 100 views
0

我想設置一個腳本,它將連接到Linux服務器,然後停止/啓動服務。但是在停止和開始服務之間,它應該等待~10秒,並檢查服務是否真的停止。如何連接到Linux服務器並使用shell腳本停止/啓動服務

service httpd stop 
--wait 10 seconds. check ps -ef | grep httpd, kill if any hanged processes 
service httpd start 

請能有人幫我該怎麼辦呢

+0

使用'sleep'和'殺-9'而不是明確的檢查。 – arkascha

+0

我可以使用用戶名和密碼連接到服務器嗎?我正在檢查表格,但大多數人都說創建一個ssh密鑰。我將在同一臺服務器上部署此shell腳本,我希望運行這些命令 –

+0

您當然可以配置ssh服務器以接受密碼。但不建議這樣做,因爲它比密鑰更不安全。而且你只能以交互的方式做到這一點,所以不用腳本。至少你不應該。 – arkascha

回答

1

wait命令是用於不同的目的,我們需要使用sleep命令。

查看此鏈接瞭解詳細的差異。 https://stackoverflow.com/a/13296927/3086531


腳本檢查進程正在運行或不

#!/bin/bash 
UP=$(pgrep httpd | wc -l); 
if [ "$UP" -ne 1 ]; 
then 
     echo "httpd is down."; 
else 
     echo "All is well."; 
fi 

你的最終代碼會

#!/bin/bash 

service httpd stop 

sleep 10 

UP=$(pgrep httpd | wc -l); 
if [ "$UP" -ne 1 ]; 
then 
    service httpd start #start serivce again, since no process are found 
else 
    echo "Service is not stopped yet."; 
    killall -15 httpd #Kills all processes related to httpd 
    service httpd start #start httpd process 
fi 
+0

不需要這種複雜性。爲什麼要麻煩檢查是否還有一個過程,無論如何你都會努力殺死它。只需在沒有檢查的情況下發射'killall -9',你就知道一切都很好。 – arkascha

+0

@arkascha,流程應該優雅地停止。我們應該允許他們在終止之前執行清理例程(例如移除鎖定文件,將內存中的數據刷新到硬盤等)。 –

+0

然後做一個'killall -15'(或簡單的'killall')而不是'killall -9'。那不是我的觀點。 – arkascha

相關問題