Câu trả lời:
Bạn có một vài lựa chọn:
1) làm cho mysql thông báo Upstart rằng nó đã bắt đầu bằng cách phát ra một sự kiện
initctl emit mysql-started
" hoặc tương tự.
Điều này có thể được xử lý bằng cách thêm initctl
lời mời vào /etc/init.d/mysql
.
2) Vô hiệu hóa mysql khỏi các đường chạy SysV bình thường và tạo một trình bao bọc Công việc khởi động để khởi động nó (không phải điều này không xử lý dừng - chỉ là một ví dụ):
cat >>/etc/init/mysql-sysv.conf<<EOT
# wait for SysV job to finish
start on stopped rc
exec /etc/init.d/mysql start
EOT
Sau đó, có công việc của bạn " start on started mysql-sysv
".
Vấn đề ở đây là bạn sẽ gặp rắc rối nếu ai đó (hoặc một số công cụ hệ thống tự động) thêm lại các /etc/rc?.d
liên kết vào /etc/init.d/mysql
tập lệnh dịch vụ ban đầu . Ngoài ra, bạn có thể thấy rằng mysql chưa thực sự sẵn sàng cho đến một lúc sau khi pid chính của nó bắt đầu. Cơ sở dữ liệu có vấn đề vì chúng có thể mất một thời gian để "trực tuyến" ngay cả sau khi chúng đã bắt đầu (phát lại nhật ký chuyển mã, v.v.).
3) Tạo một công việc mới bắt đầu ("người phục vụ") "bắt đầu dừng RC" (nghĩa là bắt đầu khi tất cả các công việc SysV đã tuyên bố đã kết thúc) và sau đó các cuộc thăm dò chờ mysql sẵn sàng, sau đó thoát ra. Có công việc của bạn "bắt đầu trên bồi bàn dừng".
4) Chuyển đổi mysql thành một công việc mới bắt đầu (tùy chọn tốt nhất). Có một điểm khởi đầu cho một cấu hình mysql mới bắt đầu ở đây: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubfox
os.system('/sbin/initctl emit consul-finished')
, sau đó bắt đầu các dịch vụ khác trướcstart on consul-finished
initctl emit cloud-init-finished
một dịch vụ sysv để có thể kết nối
Tôi đề nghị bắt đầu công việc mới bắt đầu của bạn sau khi tất cả các công việc không bắt đầu đã kết thúc:
start on started rc
/etc/init/rc.conf
là điều bắt đầu các công việc không bắt đầu từ bên trong mới bắt đầu.
Đạo cụ: /server//a/533481
Cách sử dụng
pre-start exec /etc/init.d/mysql start
trong công việc mới nổi của bạn!