Ta odpowiedź dotyczy wersji Ubuntu z Upstart (<= 14.10). Zastosuj inne podejście do wersji z Systemd (> = 15.04).
Wygląda na to, że szukasz funkcjonalności już dostarczonej w Ubuntu z Upstart . Sekcja respawn
w konfiguracji zrobi dokładnie to, czego potrzebujesz. Odradzałbym stosowanie mniej standardowego sposobu radzenia sobie z tym.
Bez dalszych szczegółów na temat procesu, którym próbujesz z nim zarządzać, trudno powiedzieć, jak powinna wyglądać konfiguracja. Zależy to na przykład od tego, czy rozwidla się i umieszcza w tle. Dokumentacja Upstart na respawn
zwrotce powinno dać Ci więcej informacji.
Niestety, nie można jeszcze poprawnie uruchomić Zadań użytkownika: nie można rozpocząć pracy z zadaniem użytkownika
Przykład
Załóżmy, że chcemy utrzymać działanie aplikacji Kalkulator, nawet gdy zostanie ona zabita ogniem (sygnał 9).
Utwórz plik konfiguracyjny w /etc/init/calculator.conf
(na podstawie tego artykułu ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
Zacznij od uruchomienia
sudo start calculator
Otwiera się na twoim bieżącym wyświetlaczu ( :0
) i ciesz się niesamowitością, widząc, jak restartuje się po zamknięciu.
Zidentyfikuj identyfikator procesu, np. Wykonując ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Zabij to ogniem.
sudo kill -9 13695
Zobacz, jak się pojawia:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Pamiętaj, że będzie to bardziej eleganckie dzięki planom Ubuntu 13.04 z odpowiednim wsparciem dla Job User.
servicename.conf
musi być zgodna z poleceniem, aby rozpocząćstart servicename
. Podejrzewam, że wybrałeś inne imię.Niezwykle prostym narzędziem, które może osiągnąć ten sam efekt bez potrzeby konfiguracji, jest
immortal
: https://immortal.run/Po prostu wykonaj polecenie w następujący sposób:
immortal <cmd>
Będzie działał w tle i uruchomi się automatycznie, jeśli wyjdzie.
immortalctl
: Wyświetl status uruchomionych zadań. Jest toname
kolumna, która zostanie wydrukowany tutaj, można to wykorzystać, aby odnieść się do pracy z innych komend sterujących.immortalctl stop <name>
: Zatrzymuje monitorowanie zadania o podanej nazwie (nie zostanie ono automatycznie uruchomione ponownie, ale bieżący proces będzie kontynuowany)immortalctl -k <name>
: Wysyła SIGKILL do bieżącego procesu.immortalctl exit <name>
: Zatrzymuje monitorowanie zadania o podanej nazwie i usuwa je z listy zadań.źródło
stdout
istderr
na pierwszym planie?immortalctl -l out.log <cmd> && tail -f out.log
tego samego efektu.Jeśli nie potrzebujesz funkcji demona / usługi / procesu w tle i po prostu chcesz to zrobić w konsoli, utwórz plik o nazwie
autorestart.sh
:Następnie
./autorestart.sh
automatycznie uruchomi się ponownie,some_command
jeśli wyjdzie lub ulegnie awarii. CTRL-C przerywa pętlę i porządnie zamyka program.Testowane na Ubuntu 18.04.
źródło
Jest sposób bez „Upstart”. Słowo kluczowe to „inittab” :-). Mimo że jest to plik zwykle niezmieniony od domyślnego, można go użyć do osiągnięcia pożądanego odrodzenia na komputerach SYSV.
źródło
ps-watcher to narzędzie, które obserwuje, które procesy są uruchomione i wykonuje akcję w określonych okolicznościach. Zainstalujmy to:
Szczegółowe informacje można znaleźć w dolnej części Uruchamianie HHVM z powrotem do PHP-FPM - to zadziałało dla mnie dobrze.
źródło
Procesami uruchamiania i odradzania zarządza „systemd” od Ubuntu 15.04, dobre wprowadzenie można znaleźć tutaj
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
przykład, od którego możesz zacząć, jest dostępny na
https://www.devdungeon.com/content/creating-systemd-service-files
To podejście zastępuje starsze oparte na / etc / inittab i upstart.
źródło