Upstart: avvia il servizio dopo il processo di non avvio


11

Su Ubuntu 10.04, devo avviare il mio servizio con startstart, ma solo quando mysql è attivo e funzionante.

Il problema è che mysql non è gestito da upstart, quindi non posso usare la funzione "start on".

Cosa posso fare ?

Risposte:


15

Hai alcune opzioni:

1) fai in modo che mysql informi Upstart che è iniziato emettendo un evento

initctl emit mysql-started" o simili.

Questo potrebbe essere gestito aggiungendo l' initctlinvocazione a /etc/init.d/mysql.

2) Disabilitare mysql dai normali runlevel SysV e creare un processo Upstart wrapper che lo avvii (non questo non gestisce l'arresto - solo un esempio):

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

Quindi, fai il tuo lavoro " start on started mysql-sysv".

Il problema qui è che potresti avere dei problemi se qualcuno (o alcuni strumenti di sistema automaticamente) aggiunge nuovamente i /etc/rc?.dcollegamenti allo /etc/init.d/mysqlscript di servizio originale . Inoltre, potresti scoprire che mysql non è effettivamente pronto fino a qualche tempo dopo l'inizio del suo pid principale. I database sono problematici in quanto potrebbero richiedere del tempo per essere "online" anche dopo l'avvio (riproduzione del registro delle transizioni, ecc.).

3) Creare un processo di avvio ("cameriere") che "avvii su rc arrestato" (ovvero avviare quando tutti i lavori SysV hanno dichiarato di aver terminato) e quindi i sondaggi in attesa che mysql sia pronto, quindi esce. Fai in modo che il tuo lavoro "inizi a cameriere fermo".

4) Converti mysql in un lavoro Upstart (l'opzione migliore). C'è un punto di partenza per una configurazione mysql upstart qui: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu


1
Dopo essermi guardato intorno, questa risposta riassume tutte le opzioni che ho. Grazie anche per aver sottolineato il divario tra "iniziato mysql" e il momento in cui mysql è effettivamente disponibile. Vediamo se il numero 4 è già stato provato da qualche parte.
Falken,

L'opzione 3 richiede "avvio al cameriere avviato". Non acceso.
adeandrade,

l'opzione 1 si adatta bene al nostro modello! Prima scarichiamo tutti gli script upstart da un server di configurazione tramite script Python in esecuzione os.system('/sbin/initctl emit consul-finished'), quindi start on consul-finished
avviamo

Grazie amico mio! Fondamentalmente ho finito per dover sostituire initctl emit cloud-init-finishedun servizio sysv per essere in grado di collegarmi
Jose Alban,

0

Suggerisco di iniziare il processo di avvio dopo aver terminato tutti i lavori non di avvio :

start on started rc

/etc/init/rc.conf è la cosa che avvia i lavori non avviati dall'interno.

Props: /server//a/533481


-1

Che ne dici di usare

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

nel tuo lavoro iniziale!


... che non magicamente avviare il parvenu lavoro quando mysql comincia.
adattamento

sì, non è quello che hai chiesto !!! hai chiesto il contrario. Almeno è così che ho capito
Kaji,

Il mio lavoro iniziale dovrebbe monitorare mysql e inviare notifiche se è inattivo. Mi sento un po 'a disagio a lanciare mysql tramite il lavoro di monitoraggio
Falken

Non penso sia del tutto sbagliato. Faccio qualcosa del genere: pre-start script if! /etc/init.d/rabbitmq-server status &> / dev / null; quindi /etc/init.d/rabbitmq-server start fi end script
maxadamo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.