Ubuntu Server 17.10にユーザーアカウントがあり、ユーザー遅延が有効になっています。システム、私の考えでは、これは素晴らしい機能です。しかし、文書化はうまくいきません。コマンドを使用してそのユーザーとしてサービスを手動で開始中に依存関係のsystemctl --user ...
問題が発生しました。
耐~/.config/systemd/user/foobar.service
依存性は次のように設定されます。
[Unit]
Decription=StackExchange Foo Bar
After=network.target
# Some non-relevant stuff removed
[Install]
WantedBy=default.target
入れたら知らposgresql.service
なかったと言って失敗しました。私はさまようシステムがシステム全体のサービスを見ることができない他の答えで見つけました。通常のシステムターゲットのみがあるため、WantedByをに設定する必要がありますdefault.target
。ただし、この設定を使用すると、システム全体のPostgresqlにタイムリーに接続できないため、起動時にサービス(実際のアプリケーション)自体は起動しません。 ]。
だから、本当の問題は:起動するたびにPosgreSQLに依存するようにこれらすべてを遅延モードに設定するにはどうすればよいですか?任意の方法で設定可能偽 postgreql.service
どのような方法でSystem Oneに接続できますか?別の方法がありますか?どんなアドバイスでも大歓迎です。
編集:Postgresqlは、ユーザーアカウントを介したサービスではなく、システム全体のアプリケーションとして実行されます。
ベストアンサー1
PostgreSQLが必要なターゲットを次のように定義します。
$ cat postgresql.target
[Unit]
Description=Emergency Mode with Networking
Requires=network.target postgresql.service
After=postgresql.service
AllowIsolate=yes
サービスに以下を追加します。
[Unit]
Decription=StackExchange Foo Bar
After=network.target postgresql.target
# Some non-relevant stuff removed
[Install]
WantedBy=default.target
編集(コメント後):
上記の内容は正しくありません。ユーザー空間のsystemdは、すべてのターゲットを見ることができると仮定しました。
調査の結果、以下の対象のみが知られているようです。
基本。ターゲット、終了。ターゲット、ソケット。ターゲット、タイマー。ターゲット、パス
これは、上記の意味のある目標にそれを追加する必要があることを意味します。 AFTERの後postgresql.service
に追加してsockets.target
開始し、AFTERの後に到達します。foobar.service
default.target
sockets.target
に追加するには、postgresql.service
に追加してsystemd設定を更新するsockets.target
必要があります。sockets.target
WantedBy=
postgresql.service
別のオプションには、ポートが開いている場合にnc -z <host> <port>
返されるnetcatが必要です0
。スクリプトでPostgreSQLポートが閉じている間はサービスが実行され、ループのみが繰り返されます。ポートが開いたら、1〜2秒ほど待ちます。実用的です)次に、サービスに何をすべきかをさせてください。