14

ubuntuでupstartを使用する場合、実行されていない場合はジョブを開始し、すでに実行されている場合は再起動するコマンドを発行するにはどうすればよいですか。アプリを新しいノードにデプロイする場合、ジョブは定義されていません。

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

スクリプトで実行できます

initctl start JOB
initctl restart JOB

しかし、それは最も良いことではないようです。

4

3 に答える 3

10

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

start を呼び出し、失敗した場合は再起動します。

initctl start JOB || initctl restart JOB

このスクリプトは、私たち二人が探していた答えではないかもしれませんが、言及するには十分短いです。

サービスがうまく機能している限り、うまくいくでしょう。

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

間違いなくこれに対する改善を探しています。

これが役立つことを願っています。

于 2012-03-16T07:00:33.760 に答える
7

hmalphettesが提案した「開始または再起動」方法も試しましたが、問題が発生しました。このアプローチを使用すると、upstart スクリプトへの更新は適用されません。代わりに、これを使用します。これは、期待どおりに機能します。

sudo stop JOB || true && sudo start JOB

これは基本的に、「実行中のジョブを停止してから開始する」という意味です。

于 2014-05-01T21:15:01.080 に答える
2
sudo service JOB restart

service コマンドは、sysvinit で最も一般的な場合と同じように Upstart でも動作するように、Ubuntu でパッチが適用されました。

systemctl restart JOB

いくつかの予期しない効果があり、一般的に使用する前に慎重に検討する必要があります。ほとんどの場合、ジョブ定義を再ロードせずにジョブを再起動できますが、これは非常にまれなケースです。

于 2014-05-05T21:27:27.790 に答える