Puncte:0

Shell Scripting - ID-uri de proces multiple în loc de unul

drapel cn

Scriu un script bash simplu pentru a închide tomcat-ul și, dacă nu se oprește cu grație, verificați dacă PID-ul tomcat-ului încă există și omorâți-l.

Trec numele tomcat ca variabilă scriptului ca mai jos. În unele cazuri, trec două sau trei nume de pisici, motiv pentru care folosirea FOR LOOP de mai jos

./shutdown.sh tomcat1

Conținutul scriptului Shutdown.sh

#!/bin/bash
pentru numele în „$@”
do
    bash /opt/$name/bin/shutdown.sh   
Terminat

dormi 30

pentru numele în „$@”
do
   process_id=`ps -ef | grep $nume | grep -v grep | awk '{ print $2 }''

   dacă [ $process_id ] 
   atunci
       kill -9 $process_id
   fi

Terminat

echo "Executarea scriptului finalizată"

Când tomcat se oprește cu grație, nu există nicio problemă. Dar când pisica nu se oprește, am probleme.

Mai jos porțiunea de cod atunci când rulează direct la promptul de comandă îmi oferă ID-ul corect al procesului (62457) al tomcat. Dar aceeași bucată de script în shell îmi oferă trei ID-uri de proces (62610,62611,62457).

process_id=`ps -ef | grep $nume | grep -v grep | awk '{ print $2 }''

poți să-mi spui de ce primesc trei ID-uri de proces în script în comparație cu doar unul?

O altă sugestie mai ușoară pentru a UCI?

Josh Zhang avatar
drapel ph
În loc să parcurgeți posibilele PID-uri, de ce nu trimiteți rezultatele în `xargs kill -9`? IE: `ps -ef | grep $nume | grep -v grep | awk '{ print $2 }' | xargs kill -9`
Raj K avatar
drapel cn
Nu l-am testat încă, dar mă întreb. În scenariul în care tomcat se închide cu grație și nu există niciun PID de Ucis, practic nicio intrare la comanda „xargs”. se va plânge comanda xargs de eroarea de sintaxă?
Josh Zhang avatar
drapel ph
Dacă nu există PID-uri pentru `xargs kill -9`, veți primi de fapt o eroare de la `kill`, deoarece ar fi la fel ca rularea comenzii fără niciun PID.
Brandon Xavier avatar
drapel us
Comanda ta process_id va include însăși comanda `./shutdown.sh`. Puteți adăuga un alt grep în conductă, cum ar fi `. . .| grep -v shutdown.sh | grep -v grep . . .` sau fă ceva de genul ` . . . | egrep -v 'grep|shutdown.sh' . . .`
John Mahowald avatar
drapel cn
Sistemul dvs. de operare are un script de inițiere generic sau un sistem de gestionare a serviciilor? A face acest lucru corect în coajă nu este atât de banal pe cât pare.
Raj K avatar
drapel cn
@BrandonXavier ` | grep -v shutdown.sh | grep -v grep ` a funcționat. Mulțumesc.
Piotr P. Karwasz avatar
drapel by
Dacă setați `CATALINA_PID` când porniți Tomcat, atunci `shutdown.sh 30 -force` face exact același lucru ca scriptul dvs. (dar mai corect). Cf. [codul sursă](https://github.com/apache/tomcat/blob/76da8deac37071e8a891580d74ba1322c7a2da2c/bin/catalina.sh#L482).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.