Jak uruchomić plik jar podczas uruchamiania i po wylogowaniu?


30

Nie mam pojęcia, od czego zacząć. Czytałem o demonach i nie rozumiałem pojęcia.

Więcej szczegółów :

  • Pisałem robota, który nigdy się nie zatrzymuje, i robota indeksującego przez RSS w Internecie.
  • Crawler został napisany w Javie - dlatego jest teraz słoikiem.
  • Jestem administratorem na komputerze z systemem Ubuntu 11.04.
  • Istnieje pewna szansa na awarię maszyny, dlatego chciałbym, aby przeszukiwacz działał przy każdym uruchomieniu maszyny.
  • Ponadto chciałbym, aby działał nawet po wylogowaniu. Nie jestem pewien, czy to możliwe, ale przez większość czasu jestem wylogowany i nadal chcę się czołgać.

Jakieś pomysły? Czy ktoś może skierować mnie we właściwym kierunku?

Po prostu szukam najprostszego rozwiązania.

Odpowiedzi:


32

Oto prosty sposób, aby to zrobić za pomocą SysVInit. Instrukcje:

  1. Utwórz skrypt początkowy i stop aplikacji. Umieść go w jakimś katalogu, w naszym przykładzie jest to:

    • Uruchom skrypt: /usr/local/bin/myapp-start.sh
    • Zatrzymanie skryptów: /usr/local/bin/myapp-stop.sh

    Każdy dostarczy instrukcje dotyczące uruchamiania / zatrzymywania aplikacji. Na przykład myapp-start.shtreść może być tak prosta, jak:

    #!/bin/bash
    
    java -jar myapp.jar 

    W przypadku skryptu stop może to być coś takiego:

    #!/bin/bash
    # Grabs and kill a process from the pidlist that has the word myapp
    
    pid=`ps aux | grep myapp | awk '{print $2}'`
    kill -9 $pid
  2. Utwórz następujący skrypt ( myscript) i włóż go /etc/init.d.

    /etc/init.d/myscript zawartość:

    #!/bin/bash
    # MyApp
    #
    # description: bla bla
    
    case $1 in
        start)
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
        stop)
            /bin/bash /usr/local/bin/myapp-stop.sh
        ;;
        restart)
            /bin/bash /usr/local/bin/myapp-stop.sh
            /bin/bash /usr/local/bin/myapp-start.sh
        ;;
    esac
    exit 0
  3. Umieść skrypt, aby zaczął z systemem (za pomocą SysV). Po prostu uruchom następujące polecenie ( jako root ):

    update-rc.d myscript defaults 

PS: Wiem, że Upstart jest świetny i bla bla, ale preferuję stary system inicjujący SysV.


1
Ale skąd system będzie wiedział, jakiego parametru użyje? Jak ustawić na „start”. Próbowałem tutaj i to nie działało.
John John Pichler,

1
Działa to, ale polecenie „service myapp start” nie kończy polecenia.
Tobia,

Teraz, jak korzystać z opcji start | stop | restart w myscript?
Codevalley,

Ponadto nawet po wykonaniu 3 kroków mój słoik nie działa podczas uruchamiania. Czy jesteś pewien, czy musimy zmienić uprawnienia, ścieżkę lub coś takiego?
Codevalley,

@Codevalley, jak wspomniałem, ta metoda jest dla init SysV. Aby skorzystać z usługi lub innego polecenia, musisz napisać zadanie upstart. Ale jeśli masz zamiar to zrobić, powinieneś napisać systemowy (ponieważ staje się standardem)
Marcos Roriz Junior

6

Tak! To jest możliwe. :) Upstart to sposób, aby upewnić się, że usługa będzie nadal działać. Ma pięć pakietów, wszystkie domyślnie zainstalowane:

  • Zaktualizuj demona init i narzędzie initctl
  • upstart-logd udostępnia demona logd i plik definicji zadania dla usługi logd
  • upstart-kompatybil-sysv udostępnia pliki definicji zadań dla zadań rc oraz narzędzia do ponownego uruchamiania, uruchamiania, zamykania i telinit, które zapewniają zgodność z SysVinit
  • Zadania uruchamiania zapewniają pliki definicji zadań dla zadań uruchamiania systemu
  • System-Services zapewnia pliki definicji zadań dla usług tty

Nauka jest bardzo przyjemna i warto. Upstart ma stronę internetową: http://upstart.ubuntu.com/


Ze strony internetowej Upstart, od 2019 r .: „Projekt jest tylko w trybie konserwacji. Żadne nowe funkcje nie są opracowywane, a ogólną radą byłoby przejście na inny minimalny system inicjujący lub systemd”
Nav

2

3 szybkie sugestie ...

  1. Tworzenie S skrypt cierpki w /etc/rc3.d(tryb wielu użytkowników konsoli) z odpowiednimi K skrypty chora /etc/rc.0i /etc/rc6.dzabić program Java w sposób kontrolowany, gdy uprawnienia systemowe w dół (runevel 0) lub restartuje (tryb 6) Patrz: Wprowadzenie do poziomów pracy .

    Możesz być w stanie uruchomić aplikację Java na poziomie 2 (rc2.d), ale jako przeszukiwacz będzie potrzebował TCP / IP. Upewnij się, że Twoja usługa sieciowa jest wcześniej dostępna / uruchomiona na poziomie 2. Praca w sieci jest zdecydowanie uruchomiona na poziomie 3.

    /etc/init.dzawiera wszystkie rzeczywiste skrypty start / kill. /etc/rcN.dkatalogi zawierają tylko linki do nich, poprzedzone S lub K, aby odpowiednio je uruchomić lub zabić, dla poszczególnych poziomów uruchamiania N.

  2. Uruchomiony proces crondpowinien trwać między wylogowaniami. Może dodaj to do swojego crontab.

  3. Uruchomiony proces nohuppowinien również trwać. Zobacz nohup: uruchom polecenie nawet po wylogowaniu .

    $ nohup java -jar myapp.jar &

    Domyślnie myapp.jarstandardowe wyjście trafi do pliku o nazwie ./nohup.outlub $HOME/nohup.outjeśli tego pierwszego nie można zapisać.


A kiedy się wyloguję, czy nadal będzie działał w tle?
RanZilber

0

Należy również pamiętać przy tworzeniu aplikacji za pomocą:

  update-rc.d myscript defaults 

Aby mieć uprawnienia 0755 i użyć lub uzyskać przed .sh ścieżką. Załóżmy, że skrypt jest na /root/test.sh, należy najpierw zmienić na płycie /root/przed uzyskaniem dostępu test.sh.

Najlepszym sposobem jest utworzenie SH na init.d i tam zmień ścieżkę na swoją shi uruchom ją w funkcji start.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.