2017-06-15 2 views
0

Linuxサーバーに接続してサービスを停止/開始するスクリプトを設定します。しかし、サービスの停止と開始の間に、10秒待ってサービスが本当に停止しているかどうかを確認する必要があります。Linuxサーバーに接続し、シェルスクリプトを使用してサービスを停止/開始する方法

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キーを作成すると言っています。このシェルスクリプトを同じサーバに配備します。私はコマンドを実行したいです –

+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 -9'の代わりに' killall -15'(あるいは単に 'killall')を実行します。それは私の問題ではありませんでした。 – arkascha

関連する問題