私のラップトップでは、テストにのみ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