Chcesz stworzyć skrypt początkowy; potrzebuję pomocy i porady

13

Muszę losowo rozpocząć i zatrzymać (z powodu braku lepszego słowa w mojej głowie) pracę. Zaczynam od pisania java -jar foo.jari żeby go zatrzymać, znajdź jego pid i zabij go. Zabicie go nie powoduje utraty danych, uszkodzenia ani nic, tylko informacje. Oba te kroki są żmudne, ponieważ pierwsze polecenie musi zostać wykonane z określonego katalogu, tj. /usr/share/jetty(Zabicie można wykonać z dowolnego miejsca).

Więc myślałem o czymś w rodzaju

service foo startoraz service foo stopdo uruchamiania i zatrzymywania usług. Czy to możliwe, a co ważniejsze prawidłowe? Czy jest jakieś inne rozwiązanie?

Dzięki.

theTuxRacer
źródło

Odpowiedzi:

13

Tak, Upstart to całkiem dobra opcja. Po prostu utwórz nowy plik:

sudoedit /etc/init/my-jetty-jar.conf

Możesz zmienić nazwę pliku na cokolwiek zechcesz, ale potem wrzuć to:

description     "Run my jetty jar"

# no start option as you might not want it to auto-start
# This might not be supported - you might need a: start on runlevel [3]
stop on runlevel [!2345]

# if you want it to automatically restart if it crashes, leave the next line in
respawn

script
    cd /usr/share/jetty
    su -c "/usb/bin/java -jar /path/to/foo.jar" nobody
end script

Kilka uwag na ten temat, sudla bezpieczeństwa nie zwracam się do nikogo. Możesz potrzebować go do suinnego konta, ale prawdopodobnie nie jest zalecane, aby działał jako root.

Oli
źródło
Czy konieczne jest ponowne uruchomienie, aby zmiany odniosły skutek? update-rc.dnie działa /
theTuxRacer
Nie potrzebujesz update-rc.dprac upstart.
Oli
Uaktualnij zegarki / etc / init za pomocą inotify, więc ogólnie wie o wszystkich edycjach plików poniżej. Nie musisz nic robić poza „start my-jetty-jar”. Aha, i @Oli, na pewno możesz mieć pracę bez początku. Zauważ, że zatrzymanie na poziomie pracy [! 2345] może być oznaczone w przyszłości jako zły sposób na zatrzymanie rzeczy (ponieważ nie gwarantuje to, że zatrzymają się przed odmontowaniem systemów plików)
SpamapS 21.01.11
Niestety, twoje rozwiązanie nie działa (już) dla Jetty 8, ponieważ start.jar spawnuje kolejne procesy, które nie zostaną zabite przez twoje podejście. Stworzyłem kolejne pytanie, aby rozwiązać ten problem: stackoverflow.com/questions/10796242/...
Sebi,
4
@Sebi Być może trzeba będzie wcisnąć expect forktam (przed scriptrozpoczęciem).
Oli