2011-12-20 35 views
10

Tôi đang cố gắng để bắt đầu kịch bản python với start-stop-daemon:khởi động stop-daemon và trăn

sudo /sbin/start-stop-daemon --start --pidfile /home/loop.pid \ 
--user www-data --group www-data -b --make-pidfile --chuid www-data \ 
--exec /usr/bin/python /home/loop.py --verbose 

nhưng không có kịch bản python trong các quá trình của tôi. Tôi đã làm gì sai?

loop.py:

import time 
while True: 
    print "working..." 
    time.sleep(3) 
+0

Bạn có lấy tệp pid không? – chrisaycock

Trả lời

3

tôi đã cố gắng kịch bản và lệnh của bạn dòng, và nó đang làm việc trên máy tính của tôi. Bạn có chắc chắn tập lệnh của mình nằm ở /home/loop.py không?

Ngoài ra, đừng mong đợi để xem các bản in đó, vì bạn đang chỉ định tùy chọn -b (nền), vì vậy quá trình này sẽ được tách ra khỏi thiết bị đầu cuối của bạn. Hãy thử chạy nó mà không có sự -b cho mục đích thử nghiệm và sau đó bạn có thể chuyển hướng đầu ra tiêu chuẩn để một logfile với -stdout tùy chọn:

sudo /sbin/start-stop-daemon --start --pidfile /home/loop.pid \ 
--user www-data --group www-data -b --make-pidfile --chuid www-data \ 
--exec /usr/bin/python /home/loop.py --verbose -stdout /var/log/loop.log 
+0

nó bắt đầu hoạt động cho tôi sau khi khởi động lại, tôi không biết tại sao) Tôi có ubuntu 11,10 và có vẻ như không có tùy chọn stdout trong phiên bản này của start-stop-daemon. Tôi thấy tùy chọn intresting "-R | --retry kiểm tra xem quá trình chết, và thử lại." Ví dụ nếu tôi giết tập lệnh của tôi, nó sẽ bắt đầu lại? nhưng tôi không thể hiểu làm thế nào để sử dụng tùy chọn này trong ví dụ của tôi? – evg

+0

Rất tiếc, nhưng bạn đã đúng. Sau đó, bạn sẽ phải tự viết cho mình stdout từ kịch bản lệnh python: 'import sys; sys.stdout.write (STRING) '. – Chewie

0

Thay vì exec python trực tiếp, nếu bạn --exec (hoặc --startas) một vỏ lồng nhau, sau đó bạn có thể làm chuyển hướng trong đó (theo this answer):

start-stop-daemon --start --quiet --chuid $DAEMONUSER \ 
--make-pidfile --pidfile $PIDFILE --background  \ 
--startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1" 

này làm việc cho tôi và ghi stdout Python của tôi khá hạnh phúc một lần tôi nhận ra đầu ra được đệm (kịch bản của tôi wasn ' t viết rất nhiều)! Sau đó tôi tìm thấy this article sử dụng 'stdbuf' để xả sang đầu ra háo hức hơn mặc định (và cũng giải thích rõ ràng):

start-stop-daemon --start --background \ 
      --pidfile $PIDFILE --make-pidfile --startas /bin/bash \ 
      -- -c "exec stdbuf -oL -eL $DAEMON $DAEMONARGS > $LOGFILE 2>&1"