2012-06-30 25 views
38

Có hướng dẫn ngắn gọn nào để giải thích cách khởi động ứng dụng khi cá thể khởi động và chạy không? Nếu đó là một trong các dịch vụ được cài đặt thông qua yum thì tôi đoán tôi có thể sử dụng /sbin/chkconfig để thêm dịch vụ vào dịch vụ. (Để chắc chắn, nó có chính xác không?)Làm cách nào để tự động khởi động ứng dụng node.js trong Amazon Linux AMI trên aws?

Tuy nhiên, tôi chỉ muốn chạy chương trình không được cài đặt thông qua yum. Để chạy chương trình node.js, tôi sẽ phải chạy tập lệnh sudo node app.js tại thư mục gốc bất cứ khi nào hệ thống khởi động.

Tôi không quen với Amazon Linux AMI vì vậy tôi gặp khó khăn khi tìm một cách 'đúng' để chạy một số tập lệnh tự động trên mỗi lần khởi động.

Có cách nào thanh lịch để thực hiện việc này không?

+0

Hãy thử giải pháp này. Nó rất đơn giản. http://stackoverflow.com/a/22171598/1028103 –

Trả lời

18

Một cách là tạo công việc mới nổi. Bằng cách đó, ứng dụng của bạn sẽ bắt đầu khi tải Linux, sẽ tự động khởi động lại nếu nó gặp sự cố và bạn có thể bắt đầu/dừng/khởi động lại nó theo sudo start yourapp/sudo stop yourapp/sudo restart yourapp.

đây đang bắt đầu bước sau:

1) Cài đặt tiện ích mới nổi (có thể được cài đặt sẵn nếu bạn sử dụng một tiêu chuẩn Amazon Linux AMI):

sudo yum install upstart 

Đối với Ubuntu:

sudo apt-get install upstart 

2) Tạo tập lệnh khởi động cho ứng dụng nút của bạn:

trong /etc/init quảng cáo d tập tin yourappname.conf với các dòng mã sau đây:

#!upstart 
description "your app name" 

start on started mountall 
stop on shutdown 

# Automatically Respawn: 
respawn 
respawn limit 99 5 

env NODE_ENV=development 

# Warning: this runs node as root user, which is a security risk 
# in many scenarios, but upstart-ing a process as a non-root user 
# is outside the scope of this question 
exec node /path_to_your_app/app.js >> /var/log/yourappname.log 2>&1 

3) bắt đầu ứng dụng của bạn bằng cách sudo start yourappname

+11

Theo như tôi biết, Linux chạy trên Amazon là RedHat có nguồn gốc, không phải Ubuntu có nguồn gốc, do đó tôi không không nghĩ rằng mới nổi có sẵn. – Unknown

+0

Có thể. Tôi chạy ứng dụng Node.js trên Debian. –

+0

Cảm ơn người đàn ông - Tôi đã kéo tóc của tôi ra khỏi này. –

6

Giải pháp nhanh cho bạn là bắt đầu ứng dụng của bạn từ /etc/rc.local; chỉ cần thêm lệnh của bạn ở đó. Nếu bạn muốn đi theo cách thanh lịch, bạn sẽ phải đóng gói ứng dụng của mình trong tệp rpm, có tập lệnh khởi động đi vào /etc/rc.d để bạn có thể sử dụng chkconfig trên ứng dụng của mình, sau đó cài đặt vòng/phút về trường hợp của bạn.

Có thể this hoặc this trợ giúp. (hoặc chỉ google để "tạo gói rpm")

+0

Nếu tôi sử dụng phương pháp rpm, tôi có phải xây dựng lại gói rpm mỗi lần tôi sửa đổi đơn đăng ký của mình không? – user482594

+0

Có, thay đổi trong ứng dụng của bạn có nghĩa là tạo và triển khai lại một .rpm mới, chính xác như cập nhật gói thông thường bằng yum. – Unknown

+3

Không cần tạo tệp RPM - bạn có thể sử dụng tập lệnh init và chkconfig mà không cần tạo RPM. – TomG

-11

Đã sử dụng forever trên AWS và nó hoạt động tốt. Cài đặt sử dụng

[sudo] npm install forever -g 

Để thêm một ứng dụng sử dụng

forever start path_to_application 

và để ngăn chặn các ứng dụng sử dụng

forever stop path_to_application 

This là một bài viết hữu ích mà giúp tôi với cài đặt nó lên.

+0

Nhưng tôi sẽ cần chạy mô-đun nút 'mãi mãi' trên mỗi lần khởi động? – user482594

+0

Có. Nó hữu ích trong trường hợp bạn chạy ứng dụng của bạn từ trình bao và muốn thoát khỏi trình bao mà không cần dừng ứng dụng. Nó cũng khởi động lại ứng dụng trong trường hợp ứng dụng chấm dứt trên một lỗi. – almypal

+1

Không, mãi mãi không bắt đầu trên mọi khởi động. –

5

Bạn có thể tạo một kịch bản mà có thể bắt đầu và ngừng ứng dụng của bạn và đặt nó trong /etc/init.d ; làm cho kịch bản tuân thủ các quy ước của chkconfig (bên dưới), và sau đó sử dụng chkconfig để thiết lập nó bắt đầu khi các dịch vụ khác được bắt đầu.

Bạn có thể chọn tập lệnh hiện có từ /etc/init.d để sử dụng làm ví dụ; this article mô tả các yêu cầu, đó là cơ bản:

  • Một kịch bản thực thi xác định vỏ cần thiết (ví dụ, #/bin/bash!)
  • Một bình luận có dạng # chkconfig: nơi thường là 345, startprio cho biết vị trí dịch vụ bắt đầu từ đâu và lệnh dừng là nơi dịch vụ dừng lại. Tôi thường chọn một dịch vụ tương tự đã tồn tại và sử dụng dịch vụ đó làm hướng dẫn cho các giá trị này (nghĩa là nếu bạn có dịch vụ liên quan đến web, hãy bắt đầu ở cùng cấp với httpd, với các ưu tiên bắt đầu và dừng tương tự).

Khi kịch bản của bạn được thiết lập, bạn có thể sử dụng

chkconfig --add yourscript 
chkconfig yourscript on 

và bạn sẽ được tốt để đi. (Một số distro có thể yêu cầu bạn phải liên kết symlink với script /etc/init.d/rc.d theo cách thủ công, nhưng tôi tin rằng bản phân phối AWS của bạn sẽ làm điều đó cho bạn khi bạn bật kịch bản.

8

Bạn có thể sử dụng mãi mãi- dịch vụ cho provisioning kịch bản nút như một dịch vụ và tự động bắt đầu trong quá trình khởi động. Sau lệnh sẽ làm cần thiết,

npm install -g forever-service 
forever-service install test 

việc này sẽ cung app.js trong thư mục hiện như một dịch vụ qua mãi mãi. dịch vụ này sẽ tự động khởi động lại mỗi cũng như khi dừng nó sẽ cố gắng một điểm dừng duyên dáng. Kịch bản này cũng quy định kịch bản logrotate

Github url: https://github.com/zapty/forever-service

Đến bây giờ mãi mãi dịch vụ hỗ trợ Amazon Linux, CentOS, Redhat hỗ trợ cho các distro Linux khác, Mac và Windows là trong các công trình ..

Chú ý: Tôi là tác giả của forever- dịch vụ.

+0

hoặc cách khởi chạy bất kỳ ứng dụng nào bạn muốn khi khởi động mà không cần phải viết mã trong trường hợp .. Cảm ơn! – Shide

+0

Điều này không làm việc nhận được "mãi mãi dịch vụ phải được chạy như là người chủ" đã thử "sudo mãi mãi dịch vụ cài đặt thử nghiệm" và amazon linux đáp ứng "sudo: mãi mãi-dịch vụ: lệnh không tìm thấy" – jdog

0

Bạn có thể sử dụng screen.Chạy crontab -e và thêm dòng này:

@reboot screen -d -m bash -c "cd /home/user/yourapp/; node app" 
0

Sử dụng đàn hồi Beanstalk :) Cung cấp hỗ trợ cho tính năng tự động mở rộng quy mô, chấm dứt SSL,/triển khai xanh xanh, vv

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