Latar Belakang:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
Saya telah membangun nginx, dan saya ingin menggunakan pemula untuk memulainya:
skrip pemula nginx dari situs:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
Saya mendapatkan "pekerjaan tidak dikenal" ketika saya mencoba menggunakan initctl untuk menjalankannya, yang baru saya pelajari ternyata berarti ada kesalahan, (apa yang salah dengan "Kesalahan" untuk menggambarkan kesalahan?)
Bisakah seseorang mengarahkan saya ke arah yang benar? Saya sudah membaca dokumentasinya, dan sepertinya agak jarang untuk penggantian inisial SysV ... tapi apa pun yang perlu ditambahkan pekerjaan ini ke daftar, jalankan, dan lanjutkan dengan apa yang tersisa dalam hidup saya. .. Ada tips?
EDIT: initctl versi init (pemula 0.6.5)
ubuntu
upstart
ubuntu-10.04
chiggs
sumber
sumber
Jawaban:
Anda tidak dapat memiliki banyak
stop on
arahan dalam deskripsi pekerjaan pemula untuk pemula>> 0,5.Dan
console owner
mungkin bukan yang Anda inginkan (ini membuat nginx pemilik sistem konsol).Mencoba:
sumber
man 5 init
daemon off
pilihan adalah untuk pengembangan saja.Saya berakhir di sini lebih dari sekali jadi saya pikir saya akan memberikan jawaban yang diperbarui berdasarkan pengalaman saya sendiri setelah menggunakan jawaban di sini. Terima kasih terutama kepada @danorton dan @orj atas jawaban mereka.
Script ini telah diuji pada Upstart 1.5 yang berjalan di Ubuntu 12.04 dengan Nginx 1.0.11 dan Passenger 3.0.11. Jika Anda tidak menggunakan Penumpang, Anda mungkin perlu bermain-main dengan
post-stop
garis. Lihat buku masak pemula.Dalam kosong
/etc/init/nginx.conf
tambahkan baris berikut (Anda dapat menghapus komentar jika Anda suka):Saya telah mengambil skrip Pemula dari Nginx Wiki dan mengubahnya karena sejumlah baris tidak diperlukan, menyebabkan kebingungan atau tidak berfungsi.
Anda mungkin perlu mengubah
env DAEMON
danenv PID
baris tergantung di mana Anda telah menginstal nginx dan sedang menulis PID. PID dapat dikonfigurasi dalam nginx.Saya mencoba semua bentuk
expect
.expect fork
Sepertinya hanya berfungsi. Dengan Penumpang nginx menciptakan 61 garpu. Pemula membutuhkan 0, 1 atau 2. Seperti orang lain telah mengisyaratkan, Pemula akan melacak PID yang salah. Saya juga dihapusrespawn
karena tidak melakukan apa-apa mungkin karena alasan yang sama. Beberapa skrip pre / post-start tambahan mungkin dapat memperbaikinya dengan meraih PID yang sebenarnya. Saya, bagaimanapun, menggunakan monit untuk menangani restart sehingga tidak membutuhkannya.Jangan gunakan
daemon off
. Ini hanya untuk pengembangan. Lihat http://wiki.nginx.org/CoreModule#daemonReferensi:
sumber
daemon off;
sehingga kaya baru jam tangan proses yang benar / PID tanpa perlu untukexpect fork
ataupost-stop
arahan. Bagian wiki yang menjelaskan opsi daemon juga menyatakan "Anda dapat menggunakan daemon off dengan aman dalam mode produksi dengan runit / daemontools, namun Anda tidak dapat melakukan pemutakhiran yang baik.", Yang saya asumsikan merujuk pada peningkatan ke biner baru pada fitur terbang .Kamu tidak bisa Setidaknya setidaknya tidak tepat.
Nginx tidak menelurkan daemonnya di salah satu dari dua cara yang dibutuhkan pemula, baik melalui "fork" atau "ekspektasi daemon", sehingga pemula tidak dapat melacak proses master nginx. Ada beberapa peretasan, tetapi mereka memiliki masalah sendiri.
Jika Anda setuju dengan fakta bahwa pemula tidak dapat melacak proses master dan membunuhnya saat shutdown, ini akan berhasil:
sumber
expect daemon
menyebabkan pemula untuk menggantung untuk saya (Ubuntu 12,04, pemula 1,5, Nginx).expect fork
berfungsi meskipun seperti yang ditunjukkan oleh @danorton, Upstart akan melacak PID yang salah. Saya juga tidak bisa mendapatkan respawn untuk bekerja (Lihat jawaban lengkap saya).Ada Upstart file konfigurasi contoh di nginx Wiki .
Anda mungkin perlu menyesuaikan jalur ke biner nginx di file konfigurasi.
File konfigurasi ini berfungsi baik untuk saya dengan Ubuntu 10.04 dan nginx 1.0.5.
Saya juga memasang
nginx
symlink di/etc/init.d
menunjuk/lib/init/upstart-job
jadi saya bisa menggunakanservice
perintah standar untuk memulai dan berhentinginx
.Catatan: Jika Anda menginstal Penumpang Phusion dengan NGINX Anda mungkin perlu menambahkan bait berikut ke skrip konfigurasi Pemula:
Saya menemukan ini diperlukan pada konfigurasi Ubuntu saya. Kalau tidak, ketika saya mengeluarkan
initctl stop nginx
atauservice nginx stop
nginx tidak benar-benar berhenti. Saya juga memperhatikan bahwa Upstart berpikir proses nginx memiliki PID yang sebenarnya adalah PID dari salah satu proses Penumpang. Jadi jelas NGINX / Penumpang sedikit membingungkan Upstart.sumber
stop: Job failed while stopping
melakukannya. Apakah kamu melihat ini?Saya menggunakan:
Berhenti pada
runlevel [!...]
tampaknya lebih standar. Itulah yang dilakukan skrip ssh / samba saham. Anda juga harus menambahkanrespawn
bit sehingga restart jika mati. Saya juga tidak yakin mengapa Anda inginconsole output
itu hanya mengirimkan output konsol ke stdout. Perilaku default adalah dengan hanya mengirim output konsol ke logger.Anda dapat melihat semua dokumen bait di wiki pemula
sumber
Lihat http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu untuk informasi lebih lanjut.
sumber
Anehnya, tidak ada jawaban di sini yang benar-benar berfungsi sepenuhnya ketika mereka meninggalkan pemula dalam keadaan berhenti / terbunuh yang mencegah orang lain mulai bekerja. Ini berarti
restart nginx
gagal.Bug dengan pemula ini didokumentasikan dengan baik di https://bugs.launchpad.net/upstart/+bug/406397 dan saya heran bahwa penulis pemula tersebut tampaknya tidak cukup peduli untuk memperbaikinya. Satu-satunya solusi yang saya lihat berfungsi adalah sebagai berikut (dicuri dari laporan bug yang sama):
Keuntungan dari menulisnya seperti ini adalah bahkan respawn bekerja. Kerugiannya adalah itu jelek dan hack jahat.
sumber