Tôi đã có cùng một câu hỏi, và tôi cũng tìm thấy một câu trả lời khác nhau . Tác giả liệt kê 4 tùy chọn để thực hiện điều này, trong đó tôi thích cái đầu tiên nhất:
Sử dụng initclt emit myservice-started
để báo hiệu việc hoàn thành khởi động dịch vụ phụ thuộc của bạn. Trong câu trả lời được liên kết, nên thêm dòng này vào cuối init.d
tập lệnh của dịch vụ phụ thuộc , nhưng tôi thích một phương thức khác. Tôi muốn tạo một inid.d
tập lệnh mới có tên myservice-started
chỉ chứa một start
phần. Sử dụng kiểu nhận xét thích hợp trong tiêu đề của tệp, tôi tuyên bố rằng nó phụ thuộc vào $myservice
việc được bắt đầu. Trong start
phần này, tôi kể về myservice
sự khởi đầu về việc bắt đầu. Bạn có thể cài đặt nó với update-rc.d
.
Tôi thích giải pháp này vì nó không xâm phạm; nếu một bản cập nhật thay đổi bất kỳ init.d
tập lệnh hiện có nào , nó sẽ không ảnh hưởng đến các tập lệnh bổ sung này. Nhưng hãy nhớ rằng những thay đổi đối với các kịch bản mới nhất của bạn là bắt buộc.
Nó có thể trông như thế này:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: myservice-started
# Required-Start: $myservice
# Default-Start: 2 3 4 5
# Short-Description: send upstart signal after starting myservice
# Description: myservice needs to run before some upstart services can run
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Signaling myservice started..." "myservice-started"
initctl emit myservice-started --no-wait
;;
*)
log_action_msg "Usage: /etc/init.d/myservice-started start"
exit 1
;;
esac
exit 0
Kịch bản mới nhất của bạn đang chờ myservice có thể lắng nghe myservice-started
sự kiện này:
start on myservice-started