systemd: bắt đầu theo yêu cầu các dịch vụ như postgresql và mysql chưa hỗ trợ kích hoạt dựa trên socket


8

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

Câu trả lời:



3

Kích hoạt dựa trên ổ cắm chưa được hỗ trợ trong PostgreSQL & MySQL.

Câu hỏi là câu trả lời. Bạn đã tìm thấy cách tốt hơn, đề cập đến nó trong câu hỏi, và sau đó tuyên bố rằng nó đã không được thực hiện. Oracle đã đóng vấn đề nói rằng kích hoạt ổ cắm (thực sự, sử dụng các mô tả tệp nghe đã được mở thay vì mở riêng, theo như chương trình máy chủ có liên quan) đã được triển khai khi chưa được thực hiện. MariaDB có một vấn đề vẫn còn mở. Đối với PostgreSQL, bạn đang ở trong cùng một chiếc thuyền với Christoph Berg đang chờ đợi điều này được thực hiện.

đọc thêm


Cảm ơn bạn, nhưng toàn bộ câu hỏi của tôi là tìm ra cách để đạt được điều này ngay bây giờ, cho bất kỳ dịch vụ nào như vậy. Tôi sẽ làm rõ điều này trong câu hỏi của tôi.
Oleg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.