2013-02-01 6 views
6

Ich laufe gerade Foreman auf Staging (Ubuntu) und sobald ich es funktioniert, wird auf Upstart zu wechseln.Foreman kann Nginx nicht starten, aber ich kann es manuell starten. Warum?

Meine Procfile.staging wie folgt aussieht:

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 

Ich kann erfolgreich nginx beginnen:

$ sudo service nginx start 

Allerdings, wenn ich $ foreman start laufen, während die anderen drei Prozesse erfolgreich zu starten, tut nginx nicht :

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 Warum startet Nginx nicht, wenn es von Foreman gestartet wird?

+0

Überprüfen Sie Ihre Nginx-Protokolle, "mit Code 0 beendet" könnte eine Menge Dinge bedeuten. Normalerweise können die Protokolle unter/var/log/nginx gefunden werden –

+0

@TanelSuurhans Danke für den Vorschlag. Leider gibt es zwei Protokolle, aber beide /var/log/nginx/access.log und /var/log/nginx/error.log sind leer. – Undistraction

+0

Was passiert, wenn Sie stattdessen '$ sudo foreman start' ausführen? –

Antwort

4

Das ist ein Problem in Ihrem Procfile.

Der nginx Befehl kann nicht sudo innerhalb foreman verwenden, weil es always ask for a password und dann wird es scheitern. Deshalb starten Sie nicht nginx und die Protokolle sind leer.

Wenn Sie wirklich sudo verwenden müssen innerhalb eines procfile könnten Sie so etwas wie folgt verwenden:

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

, die ich empfehlen, nicht wirklich. Andere Option ist sudo foreman start

anzurufen Für weitere Informationen überprüfen Sie diese issue on github, es ist genau das, was Sie lösen möchten.

Halten Sie mich auf dem Laufenden, wenn es für Sie funktioniert.

3

Sie sollten in der Lage sein, einen sudo-Zugang ohne Passwort für Ihren lokalen Benutzer hinzuzufügen, um die Verwaltung dieses Dienstes zu ermöglichen. Dies kann eine große Sicherheitslücke sein, aber wenn Sie auf die weiße Liste setzen, welche Befehle ausgeführt werden können, reduzieren Sie das Risiko drastisch. Ich empfehle das Hinzufügen nicht-Passwort sudoers Eintrag für den Befehl Dienste und alles, was Sie wollen Skript:

/etc/sudoers:

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

Eine weitere Option, wenn Sie nicht vertraut sind mit dieser wäre zu laufen nginx direkt, nicht über den Service-Manager:

nginx: /usr/sbin/nginx -c /path/to/nginx.conf