Cách phụ thuộc vào công việc mới bắt đầu từ tập lệnh init trên Ubuntu 12.04


10

Tôi đang sử dụng Ubuntu 12.04 LTS và hệ thống này sử dụng các công việc mới bắt đầu. Thật không may, hệ thống của tôi cũng phụ thuộc vào một máy chủ dbmail được biên dịch thủ công , chỉ có một tập lệnh init, nhưng không có tập lệnh khởi động.

Sử dụng update-rc.d dbmail defaultstôi đã cài đặt dbmail cho tất cả các runlevels, nhưng không may là nó được khởi động trước khi MySQL hoạt động, vì vậy daemon lại chết. Tôi cũng đã thử chuyển nó sang S90 hoặc tương tự, vẫn không có MySQL khi kịch bản được chạy.

Tôi đã cố gắng thêm một phụ thuộc vào tiêu đề LSB của tập lệnh, như sau:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          dbmail
# Required-Start:    $local_fs $remote_fs $syslog $network mysql
# Required-Stop:     $local_fs $remote_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start dbmail services
# Description:       Run network services provided by dbmail such as
#                    imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO

Thật không may, kịch bản dường như vẫn được bắt đầu trước khi MySQL. Tôi đã quen với các tập lệnh init cũ kỹ, không bắt đầu công việc, vì vậy tôi có một chút bối rối ở đây. Làm cách nào tôi có thể thêm phụ thuộc hoặc làm cách nào tôi có mysqlthể bắt đầu công việc trước dbmailtập lệnh init?

Làm cách nào tôi có thể kiểm tra / xem thứ tự bắt đầu được thực hiện cho các lệnh + init script trong khi khởi động? Có một công cụ cho việc này?

Khởi chạy tập lệnh thủ công từ trình bao sau khi khởi động hoạt động tốt, vì MySQL đã chạy rồi.


Điều làm việc như một công việc xấu xí là thêm "ngủ 3" trong chức năng "start ()" của tập lệnh init. Nhưng cần phải có một cách sạch hơn, đây chỉ là lạm dụng một điều kiện chủng tộc và tôi thực sự muốn khắc phục điều này đúng cách.
Martin C.

Câu trả lời:


12

Tôi nghĩ rằng nếu bạn chạy /etc/init.d/dbmail starttừ /etc/rc.localđó, nó sẽ bắt đầu sau tất cả các công việc mới bắt đầu của bạn / các tập lệnh init khác.

Tuy nhiên, tôi có thể sẽ khắc phục điều này bằng cách thêm một công việc mới bắt đầu tại /etc/init/dbmail.conf. Thông thường các tập lệnh init.d có rất nhiều mã để kiểm tra trạng thái, v.v., phần khởi động xử lý cho bạn. Nó có thể đơn giản như:

start on started mysql
exec /usr/local/bin/dbmail

Hoặc, bạn có thể có thể sử dụng tập lệnh init hiện có như thế này:

start on started mysql
pre-start script
  /etc/init.d/dbmail start
end script
post-stop script
  /etc/init.d/dbmail stop
end script
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.