Upstart: bắt đầu dịch vụ sau quá trình không khởi động


11

Trên Ubuntu 10.04, tôi cần khởi động dịch vụ của mình với sự khởi đầu, nhưng chỉ khi mysql hoạt động.

Vấn đề là bản thân mysql không được xử lý bởi người mới bắt đầu, vì vậy tôi không thể sử dụng tính năng "bắt đầu".

Tôi có thể làm gì ?

Câu trả lời:


15

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 initctllờ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?.dliên kết vào /etc/init.d/mysqltậ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


1
Sau khi nhìn xung quanh, câu trả lời này tổng hợp tất cả các lựa chọn tôi có. Cũng cảm ơn bạn đã chỉ ra khoảng cách giữa "bắt đầu mysql" và thời điểm mysql thực sự có sẵn. Hãy xem # 4 đã được thử ở đâu đó chưa.
Falken

Tùy chọn 3 yêu cầu "bắt đầu với người phục vụ bắt đầu". Không dừng lại.
adeandrade

tùy chọn 1 phù hợp với mô hình của chúng tôi! Trước tiên, chúng tôi tải xuống tất cả các tập lệnh khởi động từ máy chủ cấu hình thông qua tập lệnh python chạy os.system('/sbin/initctl emit consul-finished'), sau đó bắt đầu các dịch vụ khác trướcstart on consul-finished
CMag

Cảm ơn vì điều đó, bạn của tôi! Về cơ bản, cuối cùng tôi đã phải thay thế initctl emit cloud-init-finishedmột dịch vụ sysv để có thể kết nối
Jose Alban

0

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


-1

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!


... điều đó sẽ không bắt đầu một cách kỳ diệu công việc mới bắt đầu khi mysql bắt đầu.
thích nghi

vâng đó không phải là những gì bạn yêu cầu !!! bạn hỏi đường vòng khác. Ít nhất đó là cách tôi hiểu
kaji

Công việc mới nhất của tôi có nhiệm vụ giám sát mysql và gửi thông báo nếu nó không hoạt động. Tôi cảm thấy một chút không đáng tiếc khi khởi chạy mysql thông qua công việc giám sát
Falken

Tôi không nghĩ là hoàn toàn sai. Tôi làm một cái gì đó như thế này: kịch bản trước khi bắt đầu nếu! /etc/init.d/rabbitmq-server status &> / dev / null; sau đó /etc/init.d/rabbitmq-server bắt đầu tập lệnh kết thúc
maxadamo
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.