Có cách nào để chuẩn tạo daemon trong Debian không?


17

Tôi cần tạo một daemon từ ứng dụng trong Debian. Có công cụ tiêu chuẩn nào cho điều này trong Debian như "khởi động" trong Ubuntu không? Tôi chỉ cần các lệnh start-stop, để bắt đầu một chương trình như một daemon với một số tùy chọn và tệp pid và giết nó bằng tệp pid.

Tôi đã xem init.d nhưng có vẻ như đây là để khởi động thời gian khởi động. Tôi muốn bắt đầu daemon của tôi bằng tay.


2
Lưu ý rằng điều này đã thay đổi cho debian jessie, đã chuyển mặc định từ sysvinit sang systemd.
Jules

debian jessie dường như có một số dạng tương thích ngược, ít nhất là sử dụng / usr / bin / service - nếu không có cấu hình khởi động (/etc/init/ đũaservicespl.conf) và có cấu hình sysvinit (/ etc / init. d / {dịch vụ}), sau đó / usr / bin / dịch vụ sẽ tương tác với /etc/init.d/ đũaservice} như trước dưới sysvinit.
Kevin

Câu trả lời:


18

Bạn có thể tạo trình nền của mình theo cách thủ công theo /etc/init.d/skeletontệp trên Debian.

Bạn có thể sử dụng /usr/bin/serviceđể khởi chạy $ sudo service yourdaemon startvà dừng $ sudo service yourdaemon stoplại daemon của bạn.

Miễn là bạn không liên kết tập lệnh của mình với bất kỳ /etc/rc?.dthư mục nào, nó sẽ không bắt đầu khi khởi động.

Mặt khác, bạn có thể muốn xem daemontools , không phải là tiêu chuẩn trên debian nhưng có một số tính năng thú vị.


Cảm ơn. Có vẻ như tôi không có /usr/bin/servicetrên hệ thống của mình (đó là Debian Lenny), nhưng tôi có thể bắt đầu các tập lệnh trực tiếp với /etc/init.d/myservice start.
Kuroki Kaze

3
Bạn có thể sử dụng sudo invoke-rc.d yourservice startcũng
chmeee

không biết rằng. Thx
chiggsy

3

Debian (và Ubuntu) có chương trình trợ giúp start-stop-daemonđược sử dụng trong các tập lệnh init. Nó có khá nhiều tùy chọn để bắt đầu và theo dõi daemon. Bạn chỉ có thể viết một trình bao bọc xung quanh nó, vd

case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
       ;;
stop)  start-stop-daemon --stop --pidfile /my/pid/file 
       ;;
esac

3
Tôi thích /etc/init.d/skotte đề xuất ở trên, bởi vì nó cũng bao gồm các phần INIT INFO giúp di chuyển đến khởi động phụ thuộc
dpavlin

2

Để trình bày đúng quy trình cho Debian, bạn sẽ cần thực hiện một số bước bao gồm loại bỏ quá trình kiểm soát, đặt lại IO và tạo tệp id quy trình để chơi tốt. Thay vào đó, bạn có thể sử dụng một cái gì đó như chương trình daemon từ gói cùng tên để làm điều đó cho bạn. Nếu đó là những gì bạn muốn làm, câu trả lời có thể được tìm thấy ở đây trên StackOverflow: /programming/3095566/linux-daemonize

Lệnh khởi động gần giống với lệnh invoke-rc.d của Debian hoặc lệnh dịch vụ từ gói sysvinit-utils. Họ hy vọng sẽ làm việc với các tập lệnh init trong /etc/init.d. Đó là tiêu chuẩn trên Debian để tạo một trong số đó cho gói của bạn và sử dụng chương trình start-stop-daemon như bạn có thể thấy trong ví dụ /etc/init.d/sk MP.

Chỉ vì bạn tạo tập lệnh /etc/init.d/myservice không có nghĩa là nó phải tự động bắt đầu. Bạn có thể điều chỉnh các đường băng mà tại đó nó dừng lại và bắt đầu tự động bằng cách sử dụng một công cụ như update-rc.d. Điều này được mô tả chi tiết hơn tại Vô hiệu hóa một dịch vụ bắt đầu từ tất cả các đường băng?

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.