特定のサービスの後にsystemdサービスを開始しますか?[閉まっている]


85

一般的な質問があります。*.service特定のユニット*.serviceが正常に起動した後、systemdユニットを起動するにはどうすればよいですか?

より具体的な質問は、開始website.servicemongodb.serviceにのみ開始するにはどうすればよいですか?言い換えれwebsite.serviceば、に依存する必要がありますmongodb.service


1
この質問はServerFaultに属しています、違いますか?
レミ2014

1
@Rémiどちらのサイトでも大丈夫です!:)
匿名ペンギン

2
@AnonymousPenguinいいえ、返信する前の3。5年のようなものでしたが、SOの話題の質問ではありません。プログラミングではありません。SF、またはより良いのは、Unix /Linux.SEの方がはるかに適切です。
underscore_d

Stack Overflowは、プログラミングと開発に関する質問のサイトです。この質問はプログラミングや開発に関するものではないため、トピックから外れているようです。ヘルプセンターで、ここ質問できるトピックを参照してください。おそらく、スーパーユーザーまたはUnix&Linux StackExchangeが質問するのに適した場所でしょう。
JWW

回答:


118

[ユニット]セクションの下の.serviceファイル:

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service

重要な部分は mongodb.service

マンページはそれを説明していますが、フォーマットのため、一見するとそれほど明確ではありません

systemd.unit-適切にフォーマットされている

systemd.unit-フォーマットがあまりよくない


1
私たちのmongodサービスは非常に大きなデータベースを開始します。開始後にmongoがデータベースをロードするのに時間がかかるようであるため、後続のサービスは正しく開始されません。したがって、2番目のサービスは開始されますが、mongoが正常に開始されたがデータベースがロードされていないため、失敗します。たぶん遅延が...助けることができる
wayofthefuture

systemdサービスが次のシーンリオを処理することは可能ですか。複数のサービスA、B、C、Dを検討してください。Aが存在する場合は、Aの後にのみB、C、Dを開始します。それ以外の場合、Aが存在しない場合は、B、C、Dを任意の順序で開始できます。助けてください
アキレス2018

@achillesAが不要なシステムで偽のサービスAを作成できますか。このようにして、B、C、Dの依存関係を単純に保つことができます。
ウォルター・A

50

After=依存関係は、サービスを含むAfter=サービスと含まれるサービスのAfter=両方がブートアップの一部として開始するようにスケジュールされている場合にのみ有効です。

例:

a.service
[Unit]
After=b.service

この方法では、両方の場合a.serviceb.serviceされて有効になって、その後にsystemd意志注文b.servicea.service

私が誤解していないのであれば、あなたが求めているのは、有効になっていないのに、起動b.service時にどのように起動するかです。a.serviceb.service

このためのディレクティブは、Wants=またはRequires=以下[Unit]です。

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service

違いWants=とはRequires=していることでRequires=、起動に失敗はb.serviceの起動が発生しますa.serviceとのに対し、失敗しWants=a.serviceしても起動しますb.service失敗します。これについては、のマニュアルページ.unitで詳しく説明されています


8
真実はこの答えの正反対だと思います。After=website.service「website.serviceの後にユニットを実行してください!」という意味です。それがドキュメントで説明されていることです:「After =は、リストされたユニットの起動が完了した後に、構成されたユニットが起動されることを保証します」。「リストされているユニット」は「After =」の右側にあるユニットだと思います。
シンダルス2018年

「このように、a.serviceとb.serviceの両方が有効になっている場合、systemdはa.serviceの後にb.serviceを注文します。」その逆ではありませんか?swap(a, b)
MateenUlhaq19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.