2011-10-18 34 views
7

Tôi đã nhìn thấy rất nhiều tập lệnh để thực hiện một tập lệnh python trong linux, nhưng không có nhiều thông tin về cách sử dụng chúng. Bất cứ ai có thể hướng dẫn tôi về điều này?Thao tác một tập lệnh python trong debian bằng virtualenv

Tôi hiện đang có một tập lệnh python dài lắng nghe trên một ổ cắm cho một tin nhắn gửi đến, nếu đó là định dạng chính xác chấp nhận nó và sau đó lưu nó vào cơ sở dữ liệu. Kịch bản chính nó chỉ mở ổ cắm và sau đó lắng nghe một lúc thật (công việc đó!) Và thực hiện tất cả công việc trong đó.

Để daemonize, tôi có phải sửa đổi tập lệnh hiện tại của mình hoặc gọi nó từ tập lệnh riêng không? Tôi đã nhìn thấy các ví dụ của cả hai nhưng đã không làm việc.

Ngoài ra, tôi đang sử dụng virtualenv có thể là gốc của các vấn đề của tôi, bất kỳ gợi ý nào khi sử dụng điều này với các tập lệnh được sao chép?

+0

daemon chỉ là chương trình/tập lệnh liên tục chạy cho đến khi sự kiện diễn ra và nếu không có sự kiện nào xảy ra (hoặc đang xếp hàng), nó sẽ ngủ trong một khoảng thời gian ... sau đó lặp lại .... Điều gì bạn đang làm IS một daemon làm gì. Bạn đang yêu cầu khởi động nó với môi trường sao cho nó luôn chạy? – g19fanatic

+0

Tôi cần nhiều thứ khác nhau được cài đặt trong virtualenv để sử dụng bởi tập lệnh. Tôi nghĩ rằng đây là lý do tại sao tôi chưa có nó làm việc. Ngoài ra làm thế nào để tôi biết nó đang chạy? Tôi đã đọc về việc gọi 'ps aux' để hiển thị một danh sách nhưng tôi không thể nhìn thấy nó trong đó. –

Trả lời

5

Tạo tập lệnh shell kích hoạt môi trường ảo và chạy tập lệnh Python của bạn ở chế độ nền.

Ngoài ra, phải có một mô-đun python trong môi trường ảo mà bạn có thể nhập và kích hoạt môi trường từ quá. Tôi không có virtualenv làm việc tại thời điểm này, vì vậy tôi không thể kiểm tra nó ở đâu, nhưng tìm kiếm activate (hoặc một cái gì đó tương tự) trong môi trường ảo và bạn nên tìm nó.

Edit: Thêm một Debian init.d script tối thiểu

Các kịch bản tối thiểu tuyệt đối cần thiết để bắt đầu một daemon khi khởi động máy tính, là thế này:

#!/bin/sh 
/path/to/program & 

Các & làm cho chạy chương trình trong nền, vì vậy nó sẽ không dừng phần còn lại của quá trình khởi động.

Để có tập lệnh hoàn chỉnh hơn, hãy sao chép /etc/init.d/skeleton và chỉnh sửa tệp mới. Phần quan trọng cần chỉnh sửa là khối ở đầu (giữa ### BEGIN INIT INFO### END INIT INFO, được sử dụng bởi chương trình update-rc.d) và các biến số NAME, DAEMONDAEMON_ARGS. Hy vọng rằng đó là tất cả những gì cần thiết để tạo ra một kịch bản khởi động.

Kích hoạt kịch bản như thế này:

sudo update-rc.d <name of script> defaults 
sudo update-rc.d <name of script> enable 

Và để bắt đầu nó:

sudo update-rc.d <name of script> start 

Các <name of script> chỉ là tên, không phải đường dẫn đầy đủ.

+0

Tôi có tệp kích hoạt có, vì vậy tôi viết một tập lệnh bash? Làm thế nào để daemonize nó? –

+0

@ ing0: Có thể bạn muốn viết kịch bản được khởi động khi máy tính khởi động, giống như tất cả các chương trình khác trong /etc/init.d? Sau đó, nó phụ thuộc một chút vào những gì phân phối Linux bạn sử dụng. Hãy thử 'man update-rc.d', nếu trang thủ công tồn tại, nó sẽ chứa các con trỏ về cách thực hiện nó. Ngoài ra hãy thử google cho 'startup script _linuxdist_'. –

+0

Hiện đang sử dụng một biến thể của debian, tất cả những thứ tôi tìm thấy trực tuyến đều cung cấp mã như sau: http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/ Đây có phải là loại của mã không yêu cầu? –

5
script 
    export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/ 
    exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 & 
end script 

Khi bạn cần phải chạy một ứng dụng trong một virtualenv python, bạn có thể 'kích hoạt' các virtualenv, hoặc sử dụng độc đáo python lệnh của môi trường đó.

Theo trang web "Nếu bạn trực tiếp chạy tập lệnh hoặc trình thông dịch python từ thư mục/thư mục ảo của virtualenv (ví dụ: đường dẫn/đến/env/bin/pip hoặc/path/to/env/bin/python script.py) không cần kích hoạt. " - http://pypi.python.org/pypi/virtualenv

Tôi cũng có một số mô đun python được biên dịch từ nguồn. Những người cần phải được trong biến môi trường PYTHONPATH.Đó có thể là một phần của kích hoạt virtualenv của bạn, được thực hiện với virtualwrapper hoặc được gọi một cách rõ ràng (như tôi làm bên dưới.)

Việc gọi chương trình từ công việc UPSTART cũng hoạt động. Ví dụ của tôi ở trên.

Trên phiên bản Ubuntu 10.10 trên Amazon EC2, tôi đã may mắn hơn với lệnh start-stop-daemon. Tôi cũng phải vật lộn với một số “stanzas” mới nổi khác. Tôi đang gọi một ứng dụng python với một virtualenv cụ thể và một số tham số cho chương trình thực thi của tôi.

+0

Bạn có bất kỳ tập lệnh mẫu (shell và/hoặc python) nào hoạt động với khởi động không? Bạn đề cập đến "ví dụ bên dưới". – hobs

Các vấn đề liên quan