Trên máy tính xách tay của tôi, tôi chỉ sử dụng MySQL và PostgreSQL để thử nghiệm. Tôi không cần chúng cho đến khi tôi bắt đầu lập trình, có thể là vài giờ sau khi khởi động. Nhưng bắt đầu các dịch vụ bằng tay và gõ mật khẩu sudo của tôi là một phiền toái (nhỏ).
Tôi đọc rằng systemd chỉ hỗ trợ các dịch vụ bắt đầu khi cổng cho dịch vụ đó được truy cập. Nhưng một tìm kiếm nhanh của Google dường như chỉ ra rằng kích hoạt dựa trên ổ cắm chưa được hỗ trợ trong PG & MySQL.
Tôi nhận ra rằng tôi có thể hack điều này bằng cách sử dụng các kịch bản shell hoặc chờ các nhà bảo trì sửa chữa các dịch vụ, nhưng tôi đang tìm kiếm một cách tốt hơn bây giờ (cho mục đích giáo dục).
Câu hỏi: Làm thế nào tôi có thể đạt được khởi động theo yêu cầu của các dịch vụ như vậy theo cách sử dụng các tính năng systemd hoặc được khuyến nghị là "cách thực hành tốt nhất" của Linux?
Một vài suy nghĩ:
- Có dịch vụ nào tôi có thể cài đặt để xử lý các dịch vụ tự động khởi động và tự động dừng dựa trên các điều kiện (chẳng hạn như một quy trình cụ thể đang chạy) không?
- Có dịch vụ proxy nào được kích hoạt bởi một ổ cắm và lần lượt khởi chạy dịch vụ đích không?
systemd 229, Kubfox 16.04, MySQL 5.7, PostgreSQL 9.5
Cập nhật: Câu trả lời:
Cách tôi sử dụng systemd-socket-proxyd theo đề xuất của Siosm:
/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
Tải lại / dừng / bắt đầu khi cần thiết:
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
Kiểm tra:
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