Sebagai lanjutan dari pertanyaan ini , saya telah menulis layanan pemula sederhana ( /etc/init/pms.conf ) untuk kotak Ubuntu Server 11.04 tanpa kepala saya sebagai berikut:
start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn
exec /home/administrator/pms-current/PMS.sh
Saya dapat memulai (atau menghentikan) layanan ini sesuka hati dari baris perintah:
service pms start
Dan saya dapat melihat bahwa itu memang sedang berjalan.
Namun, ketika saya pertama kali mem-boot mesin saya, layanan tidak dimulai. Jika saya memasukkan SSH ke dalam kotak dan memeriksa status layanan yang saya dapatkan:
$ service pms status
pms stop/waiting
Pertanyaan saya adalah mengapa ini terjadi? Mengapa layanan saya tidak mulai saat boot?
PEMBARUAN 1 : tidak yakin apakah layanan saya sedang dimulai dan kemudian mati atau tidak sama sekali mulai, saya menambahkan yang berikut ke PMS.sh:
echo "STARTED" > $STARTLOG
Ini jelas hanya memberi saya sesuatu untuk dicari. Saya menguji ini dengan memulai layanan sendiri dan kemudian memeriksa start.log . Saya kemudian menghapus start.log dan reboot. Itu tidak ada di sana setelah restart, jadi sepertinya pemula baru tidak memulai layanan saya. Saya kira itu bisa mati pada titik awal dalam proses, tetapi itu agaknya tidak mungkin mengingat kesederhanaan dari semuanya.
UPDATE 2 : Saya baru saja memutakhirkan ke 11,10 yang mencakup peningkatan pemula, tetapi masalah ini masih terjadi.
UPDATE 3 : Seperti yang diminta, saya sudah boot dengan --debug
. Keluaran kucing /var/log/syslog | grep init
terlalu panjang untuk ditempatkan dalam pertanyaan, tetapi Anda melihatnya di sini .
UPDATE 4 : Lebih banyak log, kali ini pemula baru dimasukkan di atas. Jalankan 1 dan jalankan 2 .
cat /var/log/syslog | grep init
setelah mengaktifkan boot loggging untuk pemula menggunakan instruksi di Upstart DebuggingJawaban:
Saya akan merekomendasikan meningkatkan verbositas pekerjaan, misalnya dengan menggunakan entri pre-start / post-start.
Informasi lebih lanjut di http://upstart.ubuntu.com/cookbook/
Lihat juga di http://upstart.ubuntu.com/wiki/Debugging
sumber
Apa yang mungkin terjadi di sini adalah pms dimulai sebelum adapter jaringan Anda muncul, dan mungkin bahkan sebelum adaptor loopback (lo). Dengan asumsi kita berbicara tentang PS3 Media Server, ini adalah layanan jaringan dan mungkin tidak suka memulai tanpa antarmuka yang tersedia.
Coba ubah mulai dari kriteria Anda menjadi:
Artinya, mulai setelah antarmuka jaringan "nyata" apa pun. Namun, itu mungkin tidak ideal, jika eth0 adalah antarmuka berikutnya, PMS dimulai, tetapi Anda benar-benar ingin PMS menggunakan wlan0, itu tidak akan berhasil. Layanan akan mulai tetapi mungkin tidak dapat memilih antarmuka yang Anda ingin dengarkan. Dengan asumsi Anda tahu antarmuka yang akan Anda streaming dan itu tidak akan berubah, saya akan meng-hardcode-nya ke dalam pekerjaan, misalnya:
Pada Oneiric (11.10), Anda dapat menggunakan acara tersebut
static-network-up
untuk menunggu semua perangkat yang dikonfigurasi secara statis. Yang bagus karena memungkinkan Anda untuk menulis pekerjaan yang tergantung pada jaringan tanpa hardcoding antarmuka. [Catatan: oleh "semua perangkat yang dikonfigurasi secara statis", saya merujuk menggunakan/etc/network/interfaces
bukan NetworkManager. Itu tidak berarti statis dalam arti IP statis vs DHCP.]sumber
lo
daneth0
tapi saya menggunakan saran kedua Anda:start on filesystem and net-device-up IFACE=eth0
. Masih tidak pergi setelah reboot. Saya baru saja melihat sesuatu di log PMS yang mungkin menjadi petunjuk. Saya akan menyelidiki dan kembali ...sleep 10
- atau lebih tinggi - dalam "skrip pra-mulai" sebelum mengeksekusi skrip shell.Dari memeriksa syslog Anda, proses pms dimulai tanpa kesalahan tetapi kemudian setelah beberapa saat, tujuannya diubah dari awal hingga berhenti yang artinya terbunuh.
Ini sedikit aneh karena Anda telah menambahkan klausa repsawn sehingga harus mencoba untuk memulai lagi setelah dihentikan tetapi tidak pernah melakukannya. Jadi saya kira Anda menghapus klausul respawn.
Di antara layanan pms mulai dan berhenti hanya 2 layanan yang dimulai ufw dan antarmuka jaringan (eth0), dan 1 dimulai udev-fallback-graphics.
Tampaknya Anda memproses pms sedang dimulai secara paralel. Sayangnya dokumentasi pemula agak kabur pada perbedaan yang tepat antara
start on ...
vanilla danstart on starting ...
danstart on started ...
.Coba ubah bait startup Anda
atau terlalu
Keluaran log sedikit aneh karena acara net-device-up muncul lebih lama tetapi pms dimulai sebelum itu.
Ini harus memastikan bahwa proses Anda hanya dimulai setelah semua pengaturan jaringan selesai yaitu pekerjaan tidak hanya dimulai tetapi selesai.
Juga jangan percaya log output sepenuhnya, di awal proses boot, logout ke file apa pun tidak selalu bekerja. Lihat jawabannya di Debugging Upstart
sumber
Berhasil memperbaiki masalah serupa dengan menggunakan start on runlevel sebagai gantinya:
sumber
Saya memiliki masalah yang sama dan akhirnya saya menyelesaikannya hanya dengan:
start on runlevel [2345]
tanpa
net-device-up
ataustarted networking
hal-halIni adalah skrip pemula baru, dan berfungsi dengan baik:
sumber
Saya menemukan
chkconfig
selama pelatihan RHCSA / CE saya:Anda dapat memeriksa halaman manual Oneiric untuk detail lebih lanjut tentang kemampuannya.
sumber
Saya telah menemukan solusi untuk ini tetapi saya tidak memahaminya. Jika saya memindahkan PMS keluar
/home/administrator
dan masuk/bin/pms
dengan root sebagai pemilik, semuanya berfungsi dengan baik.Jika saya meninggalkannya di bawah
/home/administrator/
tetapi pastikan root adalah pemilik dari semua bilah/home/administrator/
direktori itu sendiri, itu masih tidak berfungsi.Jika saya menetapkan administrator sebagai pemilik segalanya dan mengubah bagian terkait skrip saya menjadi:
Itu masih tidak berhasil.
Saya kira untuk saat ini saya akan membuat
/home/root/
direktori dan memindahkan semua yang ada di sana, meskipun saya benar-benar ingin sepenuhnya memahami hal ini.sumber
chkconfig
tidak berhasil juga? Apakah Anda mencoba memberikan direktoriPMS.sh
ke root? Jika hanya solusi Anda yang berfungsi, maka buka halaman Launchpad Upstart dan hubungi para devs secara langsung..sh
maka biarkan saja semuanya di sana dan edit skrip untuk menunjuk ke direktori itu (atau bahkan mungkin mengubah direktori?).Saya memiliki masalah yang sama "tidak ada permulaan" ketika saya menyadari bahwa skrip saya bergantung pada file yang ada di rumah saya, dan rumah itu tidak dapat diakses karena crypted dengan mekanisme ubuntu standar (.Private).
start on local-filesystems
acara (mungkin) dipancarkan sebelum proses dekripsi berakhir.sumber
Apakah direktori rumah Anda di NFS? Terkadang root tidak dapat mengakses NFS.
Sebagai catatan, dalam tes kecil saya sekarang di 12.04:
start on started networking
danstart on network-interface-up INTERFACE=eth0
tidak bekerja, tapistart on started network-interface INTERFACE=eth0
tidak.Terima kasih kepada http://os4.org/wiki/upstart.html untuk menunjukkan bahwa
initctl list
selalu menunjukkan jaringan pekerjaan terhenti.sumber
Dalam kasus saya, layanan pemula tergantung pada skrip yang terletak di folder gelandangan yang disinkronkan . Memecahkan masalah menggunakan baris berikut:
Info lebih lanjut: http://razius.com/articles/launching-services-after-vagrant-mount/
sumber
Mirip dengan @xuhcc, saya datang ke sini untuk mencari tahu mengapa skrip Vagrant Upstart saya tidak berjalan. Berikut ini seharusnya berfungsi:
Tetapi tidak dalam beberapa build karena bug berikut.
https://github.com/mitchellh/vagrant/issues/6074
Solusi yang tercantum dalam laporan bekerja sangat baik untuk saya:
Bekerja dengan baik untuk saya
sumber
Itu bekerja untuk saya (saya perlu memulai layanan setelah iface up):
sumber