PostgreSQLへのユーザーの継続的なシステム依存関係

PostgreSQLへのユーザーの継続的なシステム依存関係

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.servicedefault.targetsockets.target

に追加するには、postgresql.serviceに追加してsystemd設定を更新するsockets.target必要があります。sockets.targetWantedBy=postgresql.service

別のオプションには、ポートが開いている場合にnc -z <host> <port>返されるnetcatが必要です0。スクリプトでPostgreSQLポートが閉じている間はサービスが実行され、ループのみが繰り返されます。ポートが開いたら、1〜2秒ほど待ちます。実用的です)次に、サービスに何をすべきかをさせてください。

おすすめ記事