Jak stworzyć usługę na Ubuntu Upstart

21

Mam program wykonywalny Java, który mogę uruchomić, wpisując java -jar abc.jarterminal. Jak mogę uruchomić to jako usługę? Chcę uruchomić go jako usługę, na przykład pisząc service abc start.

mehmet mekek
źródło
Pełniejsza odpowiedź znajduje się tutaj: unix.stackexchange.com/questions/1924/… Zasadniczo w Ubuntu możesz utworzyć skrypt dla /etc/init.d, który może uruchomić / zatrzymać / zrestartować twoją usługę.
Pan Ed

Odpowiedzi:

41

Upewnij się, że masz 14.04. Ubuntu 16.04 (i nowsze wersje) używa systemd, a nie Upstart.

Skrypt Upstart to plik skryptu umieszczony w /etc/init/i kończący się na .conf.

Wymaga 2 sekcji: jednej wskazującej, kiedy rozpocząć, a drugiej z poleceniem wykonania.

Najłatwiejszy skrypt na początek z próbką to:

# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program

Utworzono jako root pod /etc/init/myprogram.conf.

Jeśli twój skrypt wymaga więcej niż jednego wiersza poleceń, użyj scriptsekcji zamiast execwiersza:

# myprogram.conf
start on filesystem
script
    /usr/bin/java -jar /path_to/program
    echo "Another command"
end script

Aby włączyć uzupełnianie bash dla usługi, dodaj dowiązanie symboliczne do /etc/init.dfolderu:

sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram

Następnie spróbuj go uruchomić i zatrzymać:

sudo service myprogram start

Zgodnie z nową książką kucharską możesz tworzyć polecenia pre-start/ post-starti pre-stop/ post-stop, które mają być wykonane.

Ponadto czytam, że chcesz sprawdzić, czy proces jest uruchomiony. Sprawdź to pytanie i może skorzystaj z pre-startsekcji.

Rael Gugelmin Cunha
źródło
1
Być może potrzebujesz zrobić to za pomocą sudo chmod +x /etc/init.d/myprogram. UWAGA: Twoja odpowiedź nie działa w Ubuntu 16.04!
juliocesar
2
@juliocesar 16.04 używa systemd, a nie Upstart.
Rael Gugelmin Cunha
start onnie jest konieczną zwrotką. Jak możesz przeczytać tutaj : takim zadaniem może być kontrolowany tylko przez administratora .
SuB
@SuB tak, ale wtedy zadanie nie rozpocznie się automatycznie i było jasne, że autor pytania chce czegoś, co działa jak usługa, tj. Zaczyna się automatycznie.
Rael Gugelmin Cunha,
Tak. Wiem. właśnie dodał komentarz, aby uzupełnić odpowiedź.
SuB
0

Musisz stworzyć upstart. http://upstart.ubuntu.com/getting-started.html

Upstart to (IMHO) katastrofa w porównaniu do dobrych starych skryptów inicjujących SysV. Upstart to O wiele większy wysiłek przy niewielkim pozytywnym wpływie na dodatkową pracę. Powiedziawszy to, podejrzewam, że będzie kilku nowych obrońców, którzy zabiorą mnie do zadania, stwierdzając oczywiste ;-)

Andrzej
źródło
1
Jest to po prostu plik w pliku /etc/init/yourservice.conf z linią wskazującą, kiedy należy rozpocząć, a drugą do komendy exec. Fedora również używa upstart. Dodatkowo, nawet Debian zmienia swój schemat początkowy na SystemD, który będzie schematem Ubuntu w przyszłości.
Rael Gugelmin Cunha