2012-02-19 25 views
7

Tôi đang sử dụng mới nổi để tạo ra một daemon cho một kịch bản ngòi lở nhanh nginx python. Nếu tôi sử dụng dưới đây hoạt động:Sử dụng ubuntu để khởi động để ngăn chặn một daemon

sudo start myserver 

gì không hoạt động là:

sudo stop myserver 
stop: Unknown instance: 

Dưới đây là file conf của tôi với lệnh cho dừng quá trình này. Tôi cho rằng lệnh giết hte proccess là trong kịch bản lệnh dừng trước?

#!upstart 
description "myserver" 
author  "Test" 

start on startup 
stop on shutdown 
respawn 
#instance 

script 
    export HOME="/root" 

    echo $$ > /var/run/myerver.pid 
    exec spawn-fcgi -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 
end script 

pre-start script 
    # Date format same as (new Date()).toISOString() for consistency 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/myserver.sys.log 
end script 

pre-stop script 
    rm /var/run/myserver.pid 
    sudo kill `sudo lsof -t -i:9001` 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/myserver.sys.log 
end script 
+0

* câu hỏi Nix được chuyển đến [superuser.com] (http://superuser.com/) –

Trả lời

8

Cách tốt nhất để xử lý việc này là nói với spawn-fcgi chạy ở nền trước và không được daemonize. Trang man cho spawn-fcgi nói rằng tùy chọn -n thực hiện điều này. Sau đó, bạn có thể viết lại công việc mới nổi toàn bộ này như sau:

start on runlevel [2345] 
stop on runlevel [016] 
respawn  

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 

Lưu ý rằng với Upstart 1,4 bạn thậm chí không cần sự chỉ đạo log, vì nó mặc định là 'console log', trong đó sẽ có tất cả các đầu ra trong/var/log/mới nổi/$ UPSTART_JOB.log .. vì vậy ITW Ould chỉ là

start on runlevel [2345] 
stop on runlevel [016] 
respawn 

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 

của nó đáng chú ý rằng đây chạy như root, nhưng nó lắng nghe trên cổng 9001. vì vậy, bạn có lẽ sẽ tốt hơn chạy như ai . Với Upstart 1.5 (Ubuntu 12.04 và sau đó một lần nữa) Chỉ cần thêm này:

setuid nobody 
setgid nogroup 

(Bạn có thể phải thay đổi không ai/nogroup để ubuntu/ubuntu từ tập tin của bạn nằm trong/home/ubuntu)

Cũng lưu ý rằng start on startup sẽ không hoạt động đáng tin cậy vì sự kiện startup xảy ra trước khi hệ thống tệp được gắn kết và trước khi mạng được bật lên. Ngoài ra start on shutdown chỉ đơn giản là không hoạt động, vì nó không phải là một sự kiện thực sự. Xem man upstart-events để biết thêm sự kiện.

+0

Tôi nghĩ rằng, bạn có thể làm cho nó hoạt động đáng tin cậy nếu bạn thay đổi dòng 'start' một chút để 'bắt đầu trên (hệ thống tập tin và thiết bị mạng-up IFACE = lo) hoặc runlevel [2345] ' –

+1

Điều gì sẽ xảy ra nếu quá trình không thể được brough t đến tiền cảnh? Tôi có 2 lệnh, phpbrew fpm start và phpbrew fpm stop. Tôi chỉ muốn dịch vụ bắt đầu và dừng dịch vụ để dịch sang 2 lệnh tương ứng. Làm thế nào tôi có thể làm điều đó? – CMCDragonkai

2

Tôi tin rằng việc dừng trước sẽ dừng máy chủ của bạn, vì vậy khi Upstart cố gắng dừng máy chủ của bạn thì không có quy trình nào ngừng chạy và nó sẽ cho bạn lỗi đó.

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