Pemula: memulai layanan setelah proses non-pemula

11

Di Ubuntu 10.04, saya perlu memulai layanan saya dengan pemula, tetapi hanya ketika mysql aktif dan berjalan.

Masalahnya adalah bahwa mysql sendiri tidak ditangani oleh pemula, jadi saya tidak dapat menggunakan fitur "mulai".

Apa yang dapat saya ?

Falken
sumber

Jawaban:

15

Anda punya beberapa pilihan:

1) membuat mysql memberi tahu Upstart bahwa itu telah dimulai dengan memancarkan suatu peristiwa

initctl emit mysql-started"atau serupa.

Ini dapat ditangani dengan menambahkan initctldoa ke /etc/init.d/mysql.

2) Nonaktifkan mysql dari runlevel SysV normal dan buat wrapper Upstart job yang memulai (bukankah ini tidak menangani penghentian - hanya sebuah contoh):

cat >>/etc/init/mysql-sysv.conf<<EOT
  # wait for SysV job to finish
  start on stopped rc
  exec /etc/init.d/mysql start
EOT

Lalu, dapatkan pekerjaan Anda " start on started mysql-sysv".

Masalahnya di sini adalah Anda akan mengalami masalah jika seseorang (atau beberapa alat sistem secara otomatis) menambahkan kembali /etc/rc?.dtautan ke /etc/init.d/mysqlskrip layanan asli . Juga, Anda mungkin menemukan bahwa mysql sebenarnya tidak siap sampai beberapa saat setelah pid utama dimulai. Database bermasalah karena mereka mungkin membutuhkan waktu untuk datang "online" bahkan setelah mereka mulai (transction log replay, dll).

3) Buat pekerjaan pemula ("pelayan") yang tidak "mulai pada berhenti rc" (yaitu mulai ketika semua pekerjaan SysV telah diklaim selesai) dan kemudian jajak pendapat menunggu mysql menjadi siap, kemudian keluar. Apakah pekerjaan Anda "mulai pelayan berhenti".

4) Konversi mysql ke pekerjaan pemula (opsi terbaik). Ada titik awal untuk konfigurasi mysql pemula di sini: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

jamesodhunt
sumber
1
Setelah melihat sekeliling, jawaban ini merangkum semua opsi yang saya miliki. Juga terima kasih telah menunjukkan kesenjangan antara "mulai mysql" dan waktu ketika mysql sebenarnya tersedia. Mari kita lihat apakah # 4 sudah dicoba di suatu tempat.
Falken
Opsi 3 membutuhkan "pelayan mulai dari awal". Tidak berhenti.
adeandrade
opsi 1 sangat cocok dengan model kami! Kami pertama-tama mengunduh semua skrip pemula dari server konfigurasi melalui skrip python yang berjalan os.system('/sbin/initctl emit consul-finished'), kemudian memulai layanan lain olehstart on consul-finished
CMag
Terima kasih untuk itu, temanku! Pada dasarnya saya harus mengganti initctl emit cloud-init-finishedlayanan sysv agar dapat terhubung
Jose Alban
0

Saya sarankan memulai pekerjaan pemula Anda setelah semua pekerjaan non-pemula selesai:

start on started rc

/etc/init/rc.conf adalah hal yang memulai pekerjaan non-pemula dari dalam pemula.

Alat Peraga: /server//a/533481

Dave Gregory
sumber
-1

Bagaimana kalau menggunakan

pre-start exec /etc/init.d/mysql start

di dalam pekerjaan pemula Anda!

kaji
sumber
... itu tidak akan secara ajaib memulai pekerjaan pemula ketika mysql dimulai.
adapttr
ya itu bukan yang kamu minta !!! Anda meminta sebaliknya. Setidaknya begitulah yang saya pahami
kaji
Pekerjaan pemula saya seharusnya memonitor mysql dan mengirim notifikasi jika down. Saya merasa sedikit tidak nyaman meluncurkan mysql melalui pekerjaan pemantauan
Falken
Saya tidak berpikir itu sepenuhnya salah. Saya melakukan sesuatu seperti ini: skrip pra-mulai jika! /etc/init.d/rabbitmq-server status &> / dev / null; lalu /etc/init.d/rabbitmq-server start fi end script
maxadamo