2012-02-28 15 views
12

ubuntuでupstartを使用している場合は、実行していない場合はジョブを開始し、すでに実行している場合は再起動するコマンドを発行します。アプリケーションを新しいノードにデプロイするとき、ジョブは定義されません。 UpStart initctl start | restart ubuntu

initctl restart JOB complains if not already running 
initctl start JOB complains if already running. 

私はスクリプトそれは

initctl start JOB 
initctl restart JOB 

を行うことができます。しかし、それを行うのは素敵なことではないようです。

答えて

10

私は同じ問題の前にいました。 initctl組み込みの「lazy-stop-then-start」コマンドがまったくないので、スクリプトを作成する必要があります。

起動が開始し、それが失敗した場合、再起動します。

initctl start JOB || initctl restart JOB 

このスクリプトは、おそらく私たちの両方が探していた答えではないが、それを言及するのに十分な短いです。

サービスがうまく動作する限り、それはトリックを行います。

サービスが失敗すると、このスクリプトは2回失敗します。たとえば、サービスが停止して実際に起動に失敗した場合、サービスは再起動に失敗します。

間違いなくこれを改善しています。

こちらがお役に立てば幸いです。

+1

ありがとうございます。知っている。 initctlがそれをサポートしていないのは不思議です。ジョブが識別されます。 – Niclas

5

私はまた、hmalphettesが示唆した「開始または再開」方法を試しましたが、問題が発生しました。このアプローチを使用する場合、起動スクリプトの更新は適用されません。代わりに、私は私が期待するように動作しているこの、使用:

sudo stop JOB || true && sudo start JOB 

これを基本的に「それは、それを起動し、その後、実行している場合、ジョブを停止します。」読み込み

2
sudo service JOB restart 

serviceコマンドは、それがはsysvinitで最も一般的な例ではないとして、それは成り上がりで同じように動作させるためのUbuntuにパッチが適用されました。

systemctl restart JOB 

予期しない影響があります。一般に、使用前に十分に検討してください。ほとんどの場合、ジョブ定義を再ロードせずにジョブを再起動することができます。これはまれなケースです。

関連する問題