Upstart: uruchom usługę po zakończeniu procesu non-upstart

11

W systemie Ubuntu 10.04 muszę uruchomić usługę z aktualizacją, ale tylko wtedy, gdy mysql jest uruchomiony.

Problem polega na tym, że sam mysql nie jest obsługiwany przez upstart, więc nie mogę użyć funkcji „start on”.

Co mogę zrobić ?

Falken
źródło

Odpowiedzi:

15

Masz kilka opcji:

1) spraw, aby mysql poinformował Upstart, że zaczął się od emisji zdarzenia

initctl emit mysql-started" lub podobne.

Można to rozwiązać, dodając initctlwywołanie do /etc/init.d/mysql.

2) Wyłącz mysql z normalnych poziomów pracy SysV i utwórz zadanie upstart otoki, które je uruchamia (nie to nie obsługuje zatrzymywania - tylko przykład):

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

Następnie miej swoją pracę „ start on started mysql-sysv”.

Problem polega na tym, że wpadniesz w kłopoty, jeśli ktoś (lub jakieś narzędzie systemowe automatycznie) ponownie doda /etc/rc?.dlinki do oryginalnego /etc/init.d/mysqlskryptu usługi. Może się również okazać, że mysql nie jest właściwie gotowy, dopóki jakiś czas po uruchomieniu głównego pid nie zostanie uruchomiony. Bazy danych są problematyczne, ponieważ przejście do trybu online może trochę potrwać nawet po ich uruchomieniu (odtwarzanie dziennika transkrypcji itp.).

3) Utwórz zadanie początkowe („kelner”), które będzie „uruchamiać się po zatrzymaniu rc” (tj. Rozpocząć, gdy wszystkie zadania SysV twierdzą, że zostały zakończone), a następnie odpytuje, czekając, aż mysql będzie gotowy, a następnie kończy działanie. Niech twoja praca „zacznij od zatrzymanego kelnera”.

4) Konwertuj mysql na zadanie Upstart (najlepsza opcja). Tutaj jest punkt początkowy dla nowej konfiguracji mysql: https://github.com/devo-ps/init-scripts/tree/master/mysql/ubuntu

jamesodhunt
źródło
1
Po rozejrzeniu się ta odpowiedź podsumowuje wszystkie dostępne opcje. Dziękujemy również za wskazanie luki między „uruchomionym mysql” a czasem, kiedy mysql jest faktycznie dostępny. Zobaczmy, czy gdzieś już próbowano # 4.
Falken
Opcja 3 wymaga „zacznij od rozpoczętego kelnera”. Nie zatrzymany.
adeandrade
opcja 1 pasuje do naszego modelu! Najpierw pobieramy wszystkie skrypty os.system('/sbin/initctl emit consul-finished')startowe z serwera konfiguracji za pomocą uruchomionego skryptu Python , a następnie uruchamiamy inne usługistart on consul-finished
CMag
Dzięki za to, przyjacielu! Zasadniczo musiałem zastąpić initctl emit cloud-init-finishedusługę sysv, aby móc się połączyć
Jose Alban
0

Sugeruję rozpoczęcie pracy upstart po zakończeniu wszystkich zadań niezwiązanych z upstart:

start on started rc

/etc/init/rc.conf jest rzeczą, która rozpoczyna zadania niezwiązane z upstartem od samego początku.

Rekwizyty: /server//a/533481

Dave Gregory
źródło
-1

Co powiesz na korzystanie

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

w twojej nowej pracy!

kaji
źródło
... to nie zacznie magicznie zadania upstart, kiedy mysql się uruchomi .
adapttr
tak, nie o to prosiłeś !!! poprosiłeś o odwrót. Przynajmniej tak zrozumiałem
kaji
Moje zadanie upstart ma monitorować mysql i wysyłać powiadomienia, jeśli nie działa. Czuję się trochę niekomfortowo uruchamiając mysql za pomocą zadania monitorowania
Falken
Nie sądzę, że jest całkowicie źle. Robię coś takiego: skrypt przed uruchomieniem, jeśli! /etc/init.d/rabbitmq-server status &> / dev / null; następnie /etc/init.d/rabbitmq-server start fi end script
maxadamo