Tôi đang sử dụng python-daemon và gặp sự cố khi tôi kill -9
xử lý, nó để lại một pidfile phía sau (ok) và lần sau tôi chạy chương trình của tôi nó không hoạt động trừ khi tôi đã gỡ bỏ pidfile bằng tay (không ok).bối cảnh python-daemon không bắt đầu khi một tệp PID cũ có mặt
Tôi bắt tất cả ngoại lệ để context.close()
được gọi trước khi chấm dứt - khi điều này xảy ra (ví dụ: trên kill
) tệp /var/run/mydaemon.pid* bị xóa và daemon tiếp theo chạy thành công. Tuy nhiên, khi sử dụng SIGKILL (kill -9
), tôi không có cơ hội để gọi context.close()
và các tệp/var/run vẫn còn. Trong trường hợp này, lần sau khi tôi chạy chương trình của tôi nó không bắt đầu thành công - quá trình ban đầu trả về, nhưng quá trình daemonized khối tại context.open()
.
Có vẻ như python-daemon nên nhận thấy rằng có một pidfile cho một quá trình không còn tồn tại nữa, và xóa nó đi, nhưng điều đó không xảy ra. Tôi có nên làm điều này bằng tay không?
Lưu ý: Tôi không sử dụng with
vì mã này chạy trên Python 2,4
from daemon import DaemonContext
from daemon.pidlockfile import PIDLockFile
context = DaemonContext(pidfile = PIDLockFile("/var/run/mydaemon.pid"))
context.open()
try:
retry_main_loop()
except Exception, e:
pass
context.close()
Đó là hai năm trước để bộ nhớ của tôi rất mơ hồ, nhưng yeah, tôi nghĩ rằng đây là cách tôi đã làm nó (những gì tôi có nghĩa của "làm điều này bằng tay" được tham chiếu trong câu hỏi). Đánh dấu là câu trả lời vì tại sao không. – kdt