Skocz do zawartości

Demon Java - Jak Go Ubić?


LadyRoot

Rekomendowane odpowiedzi

Witam,

 

mam następujący problem: utworzyłam demona zarządzającego aplikacją do przetwarzania zamówień. Aplikacja jest w javie, stąd wywołanie wygląda w ten sposób:

daemon java -Dlogs.myclass="/usr/tomcat5/webtools/OrderProcessor/myclass.cfg" -Dconfig.myclass="/usr/tomcat5/webtools/OrderProcessor/ Myclass_orderprocessor.cfg"  -cp "/usr/tomcat5/webtools/OrderProcessor/all_order_processor.jar" mainclass.orderprocessor.myclass.MCOrderProcessor myclass </dev/null>>/var/log/OP/logfile&

Trochę zagmatwane, ale takie właśnie wywołanie dostarczyli mi programiści.

 

I teraz przeglądając sobie drzewo procesów widzę:

init->OrderProcessor->bash->java->10*[{java}]

 

Pytanie: w jaki sposób utworzyć skrypt ubijający OrderProcessor?

 

Ubicie samego OrderProcessora (killproc OrderProcessor) skutkuje pojawieniem się takiego drzewa procesów:

init->bash->java->10*[{java}]

A zatem zabicie rodzica nie skutkuje zabiciem całego drzewa, a jedynie przeniesieniem jego potomstwa na wyższy poziom.

 

Jakiś pomysł to zabicie procesu java (tu wszystkie klony są unicestwiane), ale to skutkuje również zabiciem innych aplikacji korzystających z engine'u (np. Tomcat-a).

 

Inny pomysł to demon pracujący na prawach nowego użytkownika (z prawami admina) i ubijanie ewentualnie całego SID-a tego użytkownika. Tylko - w jaki sposób automatycznie uruchamiać demony należące do konta nie-systemowego?

 

z góry dzięki za podpowiedź

Odnośnik do komentarza
Udostępnij na innych stronach

A jeśli będziesz miała PID interesującego Cię procesu?

Możesz go sobie wydobyć np. z "ps -ef" za pomocą prostych operacji na stringach.

Czyli w skrypcie

ps -ef | grep -i orderprocessor | grep -v grep

Wynik będzie coś jak (tu dla CUPS-a):

root      4435     1  0 10:26 ?        00:00:00 /usr/sbin/cupsd

i bierzemy do zmiennej ciąg znaków po pierwszych znakach białych (kilku spacjach) do następnych.

 

A potem oczywiście

kill zmienna

 

Ze zwykłym procesem nie byłoby problemu w ten sposób, natomiast nie znam się na własnych demonach. Demony usług systemowych zatrzymujesz "nazwa stop", ale tu pewnie nie ma tak łatwo?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 weeks later...
ps -ef | grep -i orderprocessor | grep -v grep

root      4435     1  0 10:26 ?        00:00:00 /usr/sbin/cupsd

kill zmienna

To samo uzyskasz jednym prostym poleceniem

kill `pidof OrderProcessor`

, tyle że LadyRoot napisała że ubicie tego procesu nie przynosi porządanych efektów.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Odpowiem sobie sama, bo może komuś się przyda. Najprostszy sposób okazał się najbardziej skuteczny :rolleyes:

cp /usr/bin/java /usr/bin/mojprogram

 

..a potem zmieniam wywołanie:

daemon java (...)

na

daemon mojprogram (...)

 

i w skrypcie demona dla polecenia stop wystarczy:

killproc mojprogram

 

Aż mi głupio, że to takie proste było... :D

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 months later...

Ciekawie to wymyśliłaś. Jeszcze tak dla sportu dodam coś, odnośnie tej podanej przez Ciebie metody z ubijaniem całego procesu java. Można potomne procesy, jak wspomniany tomcat, wyłączyć spod działania procesu macierzystego. W ten sposób po zakończeniu macierzystego, potomek (tomcat) dalej działa.

 

disown -h PID

 

Wyczytałem to w "100 sposobów na Linux server"

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...