2011-08-11 27 views
26

tôi đã nhận daemon làm việc ổn với những hướng dẫn này: http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/thiết NODE_ENV cho Node.js + expressjs ứng dụng như một daemon dưới ubuntu

nhưng vì điều này bắt đầu áp dụng trong chế độ PHÁT TRIỂN, các file log được spam với ổ cắm .io các bản ghi gỡ lỗi.

tôi đã cố gắng đặt NODE_ENV thành sản xuất trong tệp conf-up-up nhưng không thành công.

script 
    export HOME="/root" 
    export NODE_ENV=production 

    exec /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1 
end script 

không hoạt động.

Trả lời

26

Hãy thử

exec NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1 

Trong thiết lập của tôi, tôi đang sudoing như một người sử dụng thấp hơn, do đó, nó

exec sudo -u some-user NODE_ENV=production /usr/local/bin/node /where/yourprogram.js >> /var/log/node.log 2>&1 

và vì nó sinh sản cho một người dùng khác, nó có thể có một môi trường khác. Tôi là một newbie ở đây, nhưng nó làm việc cho tôi.

+1

Tùy chọn đầu tiên không hoạt động và ném lỗi sau: '/ proc/self/fd/9: 3: exec: NODE_ENV = production: not found' – kontinuity

+0

Đó có thể là do tôi dựa vào cú pháp bash. Kiểm tra xem bạn đang sử dụng trình bao nào và sửa lệnh phù hợp. – Yuval

+3

Đây là những gì làm việc cho tôi cuối cùng /someapp/server.js 'kịch bản xuất khẩu NODE_ENV = sản xuất exec/usr/bin/nút >> /var/log/someapp.log 2> & 1 cuối script' – kontinuity

14

Nếu bạn đang sử dụng Node.js trong sản xuất, tôi khuyên bạn nên sử dụng forever.js daemonize chương trình của bạn https://github.com/nodejitsu/forever

Cài đặt sử dụng NPM: [sudo] npm install forever -g

export NODE_ENV=production và chạy forever start app.js Bạn cũng có thể xác định nơi để đặt các bản ghi lỗi và stdout.

+1

cảm ơn. sẽ kiểm tra điều này. – pkyeck

+0

Đối với một cái gì đó tiên tiến hơn, bạn cũng có thể kiểm tra: https://github.com/learnboost/cluster – TiansHUo

+0

Chỉ cần làm rõ trên @TiansHUo bình luận cuối cùng, cụm không giải quyết vấn đề "giữ cho nó chạy" như Upstart với Respawn, Upstart + Monit hoặc Forever. –

18

Dưới đây là một tập lệnh khởi động đơn giản hơn mà bạn có thể sử dụng. Upstart bây giờ hỗ trợ mọi thứ bạn cần làm trực tiếp mà không cần phần script hoặc quá nhiều cú pháp shell được nhúng. Điều này bao gồm các biến môi trường (env), thư mục (chdir), người dùng/nhóm (setuid, setgid), đăng nhập xử lý (console log) ngày làm việc, vv các file log của bạn sẽ được xử lý và luân chuyển vào /var/log/upstart/your_app.log

description "start and stop the example express.js/node.js server" 
author "John Doe <[email protected]>" 

start on filesystem and started networking 
respawn 
console log 
chdir /opt/your_app 
setuid your_app_user 
setgid your_app_user 
env PATH=./node_modules/.bin:./node/bin:/usr/bin 
env NODE_ENV=production 
exec app/server.js 
+0

sẽ thử điều đó. Cảm ơn bạn – pkyeck

4

thiết NODE_ENV sử dụng Heroku:

heroku config:set NODE_ENV="production" 
1

Ubuntu/Upstart được liệt kê trong câu hỏi, nhưng tôi đã ở đây trong khi tìm kiếm câu trả lời cho một daemon vỏ FreeBSD/hệ thống.

Dòng dưới đây bắt đầu ứng dụng trong "phát triển" môi trường:

exec node path/to/start/script.js 

Dòng dưới đây bắt đầu ứng dụng trong "sản xuất" môi trường:

NODE_ENV=production exec node path/to/start/script.js 

Tôi đã mất một thời gian để con số này ra, vì vậy tôi nghĩ rằng tôi muốn chia sẻ.

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