Mengapa layanan pemula saya tidak dimulai saat boot sistem?


37

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 initterlalu 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 .


Apakah Anda yakin skrip tidak dieksekusi? Pesan berhenti / menunggu pms berarti bahwa pekerjaan pemula dijalankan dan bahwa semua perintah diakhiri secara normal.
atur

Tambahkan output cat /var/log/syslog | grep initsetelah mengaktifkan boot loggging untuk pemula menggunakan instruksi di Upstart Debugging
Ciaran Liedeman

@Anarci: silakan lihat pembaruan 3 di pertanyaan saya.
Kent Boogaart

Sebagian besar pengguna tidak akan memberikan alamat email seperti itu di sana, melainkan memberikan tautan ke situs pastebin seperti Ubuntu pastebin
Ciaran Liedeman

@Anarci: selesai - silakan lihat pertanyaan saya.
Kent Boogaart

Jawaban:


19

Saya akan merekomendasikan meningkatkan verbositas pekerjaan, misalnya dengan menggunakan entri pre-start / post-start.

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

Informasi lebih lanjut di http://upstart.ubuntu.com/cookbook/

Lihat juga di http://upstart.ubuntu.com/wiki/Debugging


Ini benar-benar membuat kepala saya masuk. Saya sudah mencoba selusin hal berbeda di belakang posting Anda. Semua telah gagal dengan berbagai pesan yang tidak jelas dalam log. Upaya terakhir saya menghasilkan init: pms proses utama (1329) diakhiri dengan status 143 , yang berarti tidak berarti bagi saya. Saya dapat melihat bahwa PMS.sh bahkan tidak dimulai karena hal pertama yang dilakukan adalah menulis ke log sendiri, dan entri log itu tidak ada. Saya dapat melihat output pra-mulai saya, yang memberitahu saya bahwa file target ada dan dapat dieksekusi. Saya akan mengambil ini lagi besok, tetapi jika Anda memiliki ide saya ingin mendengarnya. Terima kasih.
Kent Boogaart

hai @KentBoogaart, sepertinya saya punya masalah yang sama. Sudahkah Anda menemukan solusinya?
Daniele B

@KentBoogaart Saya memiliki masalah yang sama dengan Anda? Keberuntungan dengan Anda?
Mevin Babu

14

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:

start on filesystem and net-device-up IFACE!=lo

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:

start on filesystem and net-device-up IFACE=wlan0

Pada Oneiric (11.10), Anda dapat menggunakan acara tersebut static-network-upuntuk 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/interfacesbukan NetworkManager. Itu tidak berarti statis dalam arti IP statis vs DHCP.]


Ini terdengar seperti trik, tetapi tidak berhasil. Saya hanya memiliki lodan eth0tapi 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 ...
Kent Boogaart

Ini menarik. Satu hal yang tidak saya sebutkan adalah saya mencoba skrip asli Anda dan itu berfungsi saat boot untuk mesin saya. Saya mengaitkannya dengan keberuntungan undian (yaitu dalam kondisi balapan saya , mobil yang bagus menang, dan mobil Anda yang jelek menang). Saya benar-benar tidak dapat melihat ketergantungan apa yang kami lewatkan di sini. Aneh.
Mark Russell

2
Karena Anda dapat memulainya setelah boot, kita harus kehilangan ketergantungan layanan lain. Salah satu hack kotor yang mungkin bekerja (tetapi tidak akan menerangi kita sama sekali) adalah dengan memasukkan sleep 10- atau lebih tinggi - dalam "skrip pra-mulai" sebelum mengeksekusi skrip shell.
Mark Russell

Mark Maaf - tapi kami berada di halaman yang sama. Saya sudah mencoba sleep 10 hal dalam skrip pra-mulai. Tidak pergi. Kemudian saya mencoba menghapus debug.log sekaligus dan me-reboot. Setelah boot saya memiliki status layanan yang sama, dan tidak ada file debug.log, jadi saya tidak yakin PMS benar-benar berjalan. Apakah ada cara mudah untuk mendiagnosis ini? Jika saya mengubah PMS.sh untuk mengeluarkan beberapa output, kemana perginya? Saya kira saya selalu bisa mengarahkannya ke file saya sendiri - mungkin mencobanya nanti.
Kent Boogaart

Saya baru saja memperbarui pertanyaan saya dengan info lebih lanjut.
Kent Boogaart

3

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 dan start on starting ...dan start on started ....

Coba ubah bait startup Anda

start on started networking

atau terlalu

start on net-device-up IFACE=eth0

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


3

Berhasil memperbaiki masalah serupa dengan menggunakan start on runlevel sebagai gantinya:

start on runlevel [2345]

3

Saya memiliki masalah yang sama dan akhirnya saya menyelesaikannya hanya dengan:

start on runlevel [2345]

tanpa net-device-upatau started networkinghal-hal

Ini adalah skrip pemula baru, dan berfungsi dengan baik:

# MyApp

description     "MyApp"
author          "me"

start on runlevel [2345]
stop on runlevel [016]

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

Saya menemukan chkconfigselama pelatihan RHCSA / CE saya:

sudo apt-get install chkconfig
sudo chkconfig pms on

Anda dapat memeriksa halaman manual Oneiric untuk detail lebih lanjut tentang kemampuannya.


1

Saya telah menemukan solusi untuk ini tetapi saya tidak memahaminya. Jika saya memindahkan PMS keluar /home/administratordan masuk /bin/pmsdengan 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:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

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.


Jadi chkconfigtidak berhasil juga? Apakah Anda mencoba memberikan direktori PMS.shke root? Jika hanya solusi Anda yang berfungsi, maka buka halaman Launchpad Upstart dan hubungi para devs secara langsung.
Oxwivi

Dan jika itu cukup untuk hanya memindahkan .shmaka biarkan saja semuanya di sana dan edit skrip untuk menunjuk ke direktori itu (atau bahkan mungkin mengubah direktori?).
Oxwivi

Ya, saya mencoba membuat seluruh direktori PMS yang dimiliki oleh root. Agaknya itu tidak berfungsi karena / home / administrator / tidak dimiliki oleh root.
Kent Boogaart

Ini tidak masuk akal, saya secara teratur menjalankan skrip di direktori / home saya melalui pemula tanpa masalah, aneh.
atur

Bahkan orang asing: Saya baru saja mencoba semuanya di bawah / home / root / yang jelas dimiliki oleh root. Tidak bekerja Saya memindahkan semuanya kembali ke bawah / bin / pms dan itu berhasil lagi. Jadi sepertinya mencoba untuk memulai PMS dari bawah / rumah tidak berfungsi pada sistem saya.
Kent Boogaart

1

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.


1

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 networkingdan start on network-interface-up INTERFACE=eth0 tidak bekerja, tapi

  • start 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.


Tautan yang dirujuk rusak.
slm


0

Mirip dengan @xuhcc, saya datang ke sini untuk mencari tahu mengapa skrip Vagrant Upstart saya tidak berjalan. Berikut ini seharusnya berfungsi:

mulai gelandangan-mount

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:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

Bekerja dengan baik untuk saya


0

Itu bekerja untuk saya (saya perlu memulai layanan setelah iface up):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.