Câu trả lời:
Chạy nohup python bgservice.py &
để tập lệnh bỏ qua tín hiệu gác máy và tiếp tục chạy. Đầu ra sẽ được đưa vào nohup.out
.
Tốt nhất, bạn nên chạy tập lệnh của mình với một cái gì đó tương tự supervise
để nó có thể được khởi động lại nếu (khi) nó chết.
somecommand &
nó sẽ in ra pid như thế nào [1] 12345
. nếu không bạn có thể sử dụng $!
.
Bạn cũng có thể sử dụng màn hình GNU mà hầu như mọi hệ thống Linux / Unix đều phải có.
Nếu bạn đang sử dụng Ubuntu / Debian, phiên bản nâng cao byobu của nó cũng khá hay.
Bạn có thể cân nhắc chuyển tập lệnh python của mình thành một daemon python thích hợp, như được mô tả ở đây .
python-daemon là một công cụ tốt có thể được sử dụng để chạy các tập lệnh python như một quy trình daemon nền chứ không phải là một tập lệnh chạy mãi mãi. Bạn sẽ cần phải sửa đổi mã hiện tại một chút nhưng nó đơn giản và dễ hiểu.
Nếu bạn đang gặp sự cố với python-daemon, có một trình giám sát tiện ích khác sẽ làm điều tương tự cho bạn, nhưng trong trường hợp này, bạn sẽ không phải viết bất kỳ mã nào (hoặc sửa đổi hiện có) vì đây là một giải pháp tiện ích cho daemonizing các quy trình.
Bạn có thể nohup nó, nhưng tôi thích màn hình hơn .
Đây là một giải pháp đơn giản bên trong python bằng cách sử dụng trình trang trí:
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
Tất nhiên, bạn có thể thay thế nội dung bgservice.py
tệp của mình thay cho my_func
.
Trình bao zsh có một tùy chọn để làm cho tất cả các quy trình nền chạy với nohup.
Trong ~/.zshrc
thêm các dòng:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
Sau đó, bạn chỉ cần chạy một quá trình như sau: python bgservice.py &
:, và bạn không cần sử dụng lệnh nohup nữa.
Tôi biết không có nhiều người sử dụng zsh, nhưng đó là một shell thực sự tuyệt vời mà tôi muốn giới thiệu.
Nếu những gì bạn cần là tiến trình sẽ chạy mãi mãi cho dù bạn có đăng nhập hay không, hãy xem xét việc chạy tiến trình dưới dạng daemon.
supervisord là một giải pháp tuyệt vời có thể được sử dụng để đa dạng hóa bất kỳ quy trình nào. Nó có một tiện ích kiểm soát khác supervisorctl
có thể được sử dụng để giám sát các quy trình đang được điều hành bởi người giám sát.
Bạn không phải viết bất kỳ mã bổ sung nào hoặc sửa đổi các tập lệnh hiện có để làm cho công việc này. Hơn nữa, tài liệu dài dòng làm cho quá trình này đơn giản hơn nhiều.
Sau khi vò đầu bứt tai hàng giờ xung quanh python-daemon, người giám sát là giải pháp phù hợp với tôi trong vài phút.
Hy vọng điều này sẽ giúp ai đó đang cố gắng làm cho python-daemon hoạt động
Bạn cũng có thể sử dụng Yapdi :
Cách sử dụng cơ bản:
import yapdi daemon = yapdi.Daemon() retcode = daemon.daemonize() # This would run in daemon mode; output is not visible if retcode == yapdi.OPERATION_SUCCESSFUL: print('Hello Daemon')
Thử cái này:
nohup python -u <your file name>.py >> <your log file>.log &
Bạn có thể chạy lệnh trên trong màn hình và ra khỏi màn hình.
Bây giờ bạn có thể chỉnh sửa nhật ký của tập lệnh python của mình bằng cách: tail -f <your log file>.log
Để giết tập lệnh của bạn, bạn có thể sử dụng lệnh ps -aux và kill .
nohup: ignoring in put and appending output to
nohup.out '' và khi tôi nhấn enter, quá trình sẽ thoát với trạng thái 1. Chuyện gì đang xảy ra?