systemd:ソケットベースのアクティベーションをまだサポートしていないpostgresqlやmysqlなどのサービスのオンデマンドの開始


8

私のラップトップでは、テストにのみMySQLとPostgreSQLを使用しています。プログラミングを開始するまでは必要ありません。起動してから数時間かかる場合があります。しかし、サービスを手動で開始し、sudoパスワードを入力するのは(マイナー)な煩わしさです。

systemdがサービスの開始をサポートしているのは、そのサービスのポートにアクセスしたときだけだと私は読んだ。しかし、Googleをすばやく検索すると、PGとMySQLではソケットベースのアクティベーションがまだサポートされていないことがわかります。

シェルスクリプトを使用してこれをハッキングしたり、メンテナーがサービスを修正するのを待ったりできることはわかっていますが、今は(教育目的で)より良い方法を探しています。

質問: systemdの機能を利用したり、Linuxの「ベストプラクティス」として推奨されている方法で、このようなサービスをオンデマンドで起動するにはどうすればよいですか?

いくつかの考え:

  • 条件(特定のプロセスの実行など)に基づいて自動開始および自動停止サービスを処理するインストール可能なサービスはありますか?
  • ソケットによってアクティブ化され、ターゲットサービスを起動するプロキシサービスはありますか?

systemd 229、Kubuntu 16.04、MySQL 5.7、PostgreSQL 9.5

更新:答え:

Siosmによって提案されたsystemd-socket-proxydの使用方法:

/etc/mysql/mysql.conf.d/mysqld.cnf

port        = 13306

/etc/systemd/system/proxy-to-mysql.socket

[Socket]
ListenStream=0.0.0.0:3306

[Install]
WantedBy=sockets.target

/etc/systemd/system/proxy-to-mysql.service

[Unit]
Requires=mysql.service
After=mysql.service

[Service]
# note: this path may vary
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:13306
PrivateTmp=no
PrivateNetwork=no

必要に応じてリロード/停止/開始:

sudo systemctl daemon-reload
sudo systemctl enable proxy-to-mysql.socket
sudo systemctl start proxy-to-mysql.socket
sudo systemctl stop mysql.service  # for testing

テスト:

sudo systemctl status proxy-to-mysql.socket # should be ACTIVE
sudo systemctl status proxy-to-mysql # should be INACTIVE
sudo systemctl status mysql # should be INACTIVE
telnet 127.0.0.1 3306
sudo systemctl status proxy-to-mysql # should be ACTIVE
sudo systemctl status mysql # should be ACTIVE

回答:



3

ソケットベースのアクティベーションは、PostgreSQLとMySQLではまだサポートされていません。

問題は答えです。あなたはすでにより良い方法を見つけ、それを質問で述べ、それが実装されていないと述べました。Oracleは、ソケットのアクティブ化(実際には、サーバープログラムに関する限り、独自のディスクリプタを開くのではなく、すでに開かれているリスニングファイル記述子を使用する)が実装されていないにもかかわらず実装されていたとして、問題を閉じました。MariaDBにはまだ未解決の問題があります。PostgreSQLに関しては、これが実装されるのを待っているChristoph Bergと同じボートにいます。

参考文献


ありがとうございましたが、私の質問の要点は、そのようなサービスに対して、これを今どのように実現するかを理解することです。私の質問でこれを明らかにします。
Oleg
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.