2015-06-09 10 views
5

Tôi có một kịch bản Python xử lý dữ liệu của một luồng dữ liệu HTTP và tôi cần tập lệnh này về lý thuyết luôn luôn chạy và trừ khi tôi tắt nó theo cách thủ công để cập nhật và chạy lại. Tôi đã tự hỏi thực hành tốt nhất để làm điều này là trên một Unix (đặc biệt là Ubuntu) để ngay cả khi Terminal được đóng vv script vẫn tiếp tục chạy ở chế độ nền trừ khi quá trình hoặc máy chủ bị tắt?Unix: Có kịch bản Python liên tục chạy thực hành tốt nhất?

Cảm ơn

+0

Tôi đề nghị bạn hãy xem để Cron. –

+0

vì vậy nếu nó gặp sự cố, bạn muốn khởi động lại có? Tôi nghĩ rằng mới nổi sẽ là một cách tiếp cận tốt http://upstart.ubuntu.com/cookbook/ –

+0

Hoặc giám sát: http://supervisord.org/ – RemcoGerlich

Trả lời

4

Thêm tập lệnh của bạn vào rc.local sẽ hoạt động, nhưng 'thực hành tốt nhất' theo ý kiến ​​của tôi là sử dụng Upstart. Xem bài đăng này:

Daemon vs Upstart for python script

1

Tôi không chắc chắn như thế nào "thực hành tốt nhất" này là nhưng bạn có thể làm:

Thêm chương trình để: /etc/rc.d/rc.local

này sẽ chạy chương trình lúc khởi động.

Nếu bạn thêm '&' vào cuối dòng, nó sẽ được chạy ẩn.

Nếu bạn không muốn chạy chương trình theo cách thủ công (không phải lúc khởi động), bạn có thể chuyển sang tty khác bằng cách nhấn ctrl + alt + f1, (điều này sẽ mở tty1 và sẽ hoạt động với f1 - f6) rồi chạy lệnh. Thiết bị đầu cuối này bạn không cần phải mở trong một cửa sổ để bạn không phải lo lắng về việc nó bị đóng. Để quay lại màn hình nền, hãy sử dụng ctrl + alt + f7.

1

Đây là vòng lặp vô hạn. Bạn có thể khởi chạy kịch bản lúc khởi động và nó sẽ chạy mãi mãi cho đến khi bạn tự hủy quá trình hoặc tắt máy tính.

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import time 

while True: 
    print 'Hello' 
    time.sleep(2) # 2 second delay 
6

Từ câu hỏi của bạn bạn đang ngụ ý rằng bạn sẽ bắt đầu kịch bản từ thiết bị đầu cuối của bạn và không phải bởi bất kỳ các phương pháp quản lý khởi động kịch bản Linux như kịch bản systemd hoặc mới nổi hoặc init.d.

Nếu bạn có ý định bắt đầu kịch bản của bạn từ thiết bị đầu cuối, và bạn muốn nó tiếp tục chạy sau khi bạn đóng terminal của bạn, bạn cần phải làm hai việc

1. Làm cho nó chạy ở chế độ nền bằng cách thêm '&' sau tập lệnh của bạn.

2. Khi bạn đóng thiết bị đầu cuối, vỏ liên quan đến nó sẽ gửi tín hiệu HUP đến tất cả các quy trình trước khi nó chết. Để bỏ qua tín hiệu HUP và tiếp tục chạy ở chế độ nền, bạn cần bắt đầu tập lệnh của mình bằng 'nohup'.

tl; dr
Chạy kịch bản của bạn theo cách này:

$ nohup python mypythonscript.py & 
Các vấn đề liên quan