Như bạn muốn ứng dụng của bạn để chạy độc lập (nếu tôi hiểu một cách chính xác), bạn có thể xử lý này giống như với bất kỳ (không web) khác ứng dụng.
Nếu bạn chỉ muốn chương trình chạy dưới nền, bạn có thể đọc this receipe giải thích cách tạo ứng dụng daemon và thảo luận tốt đẹp về chủ đề này (trong nhận xét).
Mặt khác, nếu bạn muốn tạo một "daemon hệ thống" với ứng dụng của bạn (khởi động khi khởi động mọi hệ thống), tôi sẽ sử dụng tập lệnh shell. Để xem cách tạo các tập lệnh khởi động cho hệ thống của mình, bạn có thể lấy cảm hứng từ các tập lệnh khởi động khác trên máy của mình. Một giải pháp sẽ chạy chương trình của bạn ở chế độ nền với python my_app.py &
(từ tập lệnh khởi động) và sau đó sử dụng biến số $!
để nhận được quy trình 'pid và lưu nó vào một tệp, theo cách này bạn cũng có thể dừng quá trình của mình bằng cách đọc "tệp pid" và sử dụng lệnh kill
(gửi SIGINT
vào quá trình của bạn sẽ kích hoạt một ngoại lệ KeyboardInterrupt
để được nêu trong đơn của bạn).
EDIT:
Trong bình luận câu hỏi của bạn, bạn nói sử dụng python main.py &
sẽ không an toàn như các ứng dụng sẽ không khởi động lại nếu nó thất bại/rơi, nhưng đó là tương tự với bất kỳ daemon khác trên hệ thống của bạn (ví Ví dụ, nếu Apache bị lỗi, nó sẽ không tự khởi động lại). Nếu bạn muốn khởi động lại ứng dụng của mình nếu nó gặp sự cố, bạn sẽ phải viết một daemon thứ 2, sẽ kiểm tra các khoảng thời gian đều đặn nếu ứng dụng của bạn vẫn đang chạy và khởi động lại nếu cần.
Về điều ghi nhật ký, bạn có thể làm cho đầu ra ứng dụng của mình thành stdout/stderr
và chuyển hướng nó từ tập lệnh khởi động (python main.py &> /path/to/app.log &
) hoặc xử lý ghi nhật ký từ ứng dụng của bạn, sử dụng mô-đun logging
.
Tại sao bạn muốn chạy nó dưới dạng daemon? – moraes
Chạy với 'python main.py &' có vẻ hơi không an toàn. Nếu nó không thành công/bị treo, tôi sẽ tự động khởi động lại cũng như ghi deamon vào một tệp nhật ký. – fredrik
@fredrik i đã thêm chi tiết về xử lý sự cố và đăng nhập vào câu trả lời của tôi – MatToufoutu