Kịch bản khởi động và start-stop-daemon


8

Tôi gặp vấn đề khi tạo một tập lệnh mới bắt đầu sẽ gọi tập lệnh nhiều lần, khiến IRCd của tôi sinh ra khoảng 8 lần hoặc lâu hơn. Để khắc phục điều này, tôi đã sử dụng start-stop-daemon:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

Điều này hoạt động chính xác như tôi muốn, NGOẠI TRỪ rằng:

stop ircd

nói rằng nó dừng nó, nhưng Inspircd vẫn đang chạy sau đó.

Có cách nào tốt hơn là sử dụng start-stop-daemon sẽ ngăn tập lệnh mở 8 trường hợp, hoặc có cách nào để tôi có thể làm cho nó tương thích với start-stop-daemon không?

Câu trả lời:


6

Tôi không thể hoàn toàn chắc chắn nhưng Inspircd có thể sẽ tránh đường khi nó chạy để Upstart không biết PID của nó thực sự ở đâu. Nếu đó là trường hợp, nó có thể được sửa chữa vì Upstart có hai khổ thơ để xử lý các quá trình rèn:

  • expect fork bắt các quá trình mà fork một lần (imo, rất có thể là trường hợp ở đây).
  • expect daemonbắt những thứ mà ngã ba lần ... Điều này thể đang làm.

Vì vậy, hãy thử điều này:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

Và nếu điều đó không làm việc, kiểm tra của tôi su-statement để đảm bảo nó hoạt động từ dòng lệnh và sau đó thay đổi expect forkđể expect daemonvà cung cấp cho nó xoáy khác.


Chỉnh sửa bashtrình bao bọc có thể làm hại nó nhiều hơn là tốt. Đây có thể là một thực thi tốt hơn:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

Cảm ơn bạn! Nó hoạt động gọn gàng hơn, và có expect forkkhắc phục vấn đề. Tuy nhiên, tôi vẫn không thể gọi 'dừng ircd' và dừng tập lệnh. Tuy nhiên, tôi sẽ quản lý mà không có nó (ps aux, kill), nhưng nếu bạn có thể sửa đổi câu trả lời của mình để bao gồm một cách để làm điều đó, tôi sẽ là một người dùng Ubuntu rất hạnh phúc;)
Liam Dawson

Hmm - khi bạn chạy sudo start ircdnó sẽ xuất ra một PID. Nếu bạn dán cái đó vào cuối ps(ví dụ ps u -p <PID>:) thì điều đó có cho thấy một quá trình có ý nghĩa không? Nếu không, nó vẫn không mất dấu vết của PID nên bạn có thể muốn thửexpect daemon
Oli

Trên thực tế, nó không tạo ra một PID, chỉ là một số đầu ra giao diện điều khiển. Oh well, ps aux, kill <pid>hoạt động tốt, tôi đã nhiều lo ngại về việc kịch bản BẮT ĐẦU khi khởi động, mà nó làm. Cảm ơn!
Liam Dawson
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.