2013-02-01 34 views
6

Tôi hiện đang chạy Foreman trên dàn dựng (Ubuntu) và một khi tôi nhận được nó làm việc sẽ chuyển sang sử dụng mới nổi.Foreman không thể bắt đầu Nginx, nhưng tôi có thể bắt đầu nó theo cách thủ công. Tại sao?

My Procfile.staging trông như thế này:

nginx: sudo service nginx start 
unicorn: bundle exec unicorn -c ./config/unicorn.rb 
redis: bundle exec redis-server 
sidekiq: bundle exec sidekiq -v -C ./config/sidekiq.yml 

tôi có thể bắt đầu thành công nginx sử dụng:

$ sudo service nginx start 

Tuy nhiên khi tôi chạy $ foreman start, trong khi ba quá trình khác bắt đầu thành công, nginx không :

11:15:46 nginx.1 | started with pid 15966 
11:15:46 unicorn.1 | started with pid 15968 
11:15:46 redis.1 | started with pid 15971 
11:15:46 sidekiq.1 | started with pid 15974 
11:15:46 nginx.1 | Starting nginx: nginx. 
11:15:46 nginx.1 | exited with code 0 
11:15:46 system | sending SIGTERM to all processes 
SIGTERM received 
11:15:46 unicorn.1 | terminated by SIGTERM 
11:15:46 redis.1 | terminated by SIGTERM 
11:15:46 sidekiq.1 | terminated by SIGTERM 

S o tại sao nginx không bắt đầu khi bắt đầu bởi Foreman?

+0

Kiểm tra nhật ký nginx của bạn, "đã thoát với mã 0" có thể có nghĩa là nhiều thứ. Thông thường, bạn có thể tìm thấy nhật ký tại/var/log/nginx –

+0

@TanelSuurhans Cảm ơn bạn đã đề xuất. Thật không may có hai bản ghi, nhưng cả hai /var/log/nginx/access.log và /var/log/nginx/error.log đều trống. – Undistraction

+0

Điều gì xảy ra nếu bạn thực hiện '$ sudo foreman start'? –

Trả lời

4

Đây là vấn đề trong Procfile của bạn.

Lệnh nginx không thể sử dụng sudo bên trong foreman, vì nó sẽ always ask for a password và sau đó sẽ thất bại. Đó là lý do tại sao bạn không bắt đầu nginx và nhật ký trống.

Nếu bạn thực sự cần phải sử dụng sudo bên trong một procfile bạn có thể sử dụng một cái gì đó như thế này:

sudo_app: echo "sudo_password" | sudo -S app_command 
nginx: echo "sudo_password" | sudo -S service nginx start 

mà tôi thực sự tôi không khuyến khích. Tùy chọn khác là gọi sudo foreman start

Để biết thêm thông tin, hãy xem issue on github này, đó chính là điều bạn muốn giải quyết.

Hãy để tôi đăng nếu nó phù hợp với bạn.

3

Bạn sẽ có thể thêm quyền truy cập sudo mà không cần mật khẩu cho người dùng cục bộ của mình để cho phép quản lý dịch vụ này. Đây có thể là một lỗ hổng bảo mật lớn, nhưng nếu bạn liệt kê các lệnh nào có thể chạy, bạn sẽ giảm đáng kể rủi ro. Tôi khuyên bạn nên thêm không mật khẩu sudoers mục nhập cho lệnh dịch vụ và bất cứ điều gì khác mà bạn muốn kịch bản:

/etc/sudoers:

your_user_name  ALL = (ALL) NOPASSWD: /usr/sbin/service 

Một tùy chọn khác nếu bạn không thoải mái với điều này sẽ được chạy nginx trực tiếp, không thông qua người quản lý dịch vụ:

nginx: /usr/sbin/nginx -c /path/to/nginx.conf 
Các vấn đề liên quan