[bash] alle processen killen via SSH

Pagina: 1
Acties:

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Ik wil alle processen killen die ik heb gevonden met behulp van awk en cut. Door de onderstaande regel uit te voeren, krijg ik als resultaat alle proces id's. Deze wil ik vervolgens met kill proberen af te sluiten. Het enige probleem is dat er soms meerdere id's uit de onderstaande regel komen. Is het mogelijk de id's te koppelen aan meerdere kill commando's?

code:
1
2
3
[root@server05 proc]# netstat -ep | grep user05 | awk '{print $9}' | cut -f1 -d/
21273
21263

http://www.xbmcfreak.nl/


  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 20:59

odysseus

Debian GNU/Linux Sid

Je kunt het volgende doen:
code:
1
netstat -ep | grep user05 | awk '{print $9}' | cut -f1 -d/ | xargs kill

Dan wordt voor elke regel een nieuw kill-commando gestart en zo worden alle processen afgeschoten :).

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 14-02 12:23

Kees

Serveradmin / BOFH / DoC
of kill `commando`
backticks dus

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 14-02 12:23

Kees

Serveradmin / BOFH / DoC
Open op verzoek voor een aanvullende vraag + topictitel edit

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Bedankt!

Ik wil nu het volgende proberen. Remote, via ssh, de bijbehorende processen killen op de remote server. Ik heb dit geprobeerd met het onderstaande commando. Afgeleid van boven. Maar zonder goed resultaat. Het uitlezen van de processen gaat wel goed. Het killen probeert hij echter lokaal. Weet iemand wat er verkeerd gaat?

code:
1
2
ssh root@server01.domein.nl \
kill -9 `ps -eaf | grep user01 | awk '{print $2}' | xargs`

[ Voor 6% gewijzigd door Erhnam op 25-01-2005 10:03 ]

http://www.xbmcfreak.nl/


  • Paul
  • Registratie: September 2000
  • Laatst online: 01:11
Waarom hij het lokaal wil doen zou ik niet weten (zo goed ben ik niet bekend met ssh) maar die xargs hoort er niet :) Je moet dus OF xargs gebruiken, OF backticks :) Je wilt spaties ipv newlines tussen de argumenten. Ik heb niets gezegd :P

[ Voor 20% gewijzigd door Paul op 25-01-2005 10:16 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

code:
1
2
3
for i in $(netstat -ep | grep user05 | awk '{print $9}' | cut -f1 -d/); do
  kill $i;
done

D'r zijn zoveel manieren om dit te doen ;)

Hij doet 't in bovenstaand voorbeeld trouwens lokaal omdat die backticks in de lokale shell gegeven worden waardoor 't als argument aan ssh meekomt. Zelfde geldt voor die pipes. Probeer er eens gewone singlequotejes omheen te zetten. (')

[ Voor 54% gewijzigd door CyBeR op 25-01-2005 10:17 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Lokaal werkt het wel maar via ssh werkt het helaas niet. Ik wil het via ssh laten lopen omdat ik variables in het script ga zetten en meerdere server wil beheren op deze manier. Met en zonder (') werkt het niet.

code:
1
2
3
4
ssh root@server01.domein.nl \
'kill -9 `ps -eaf | grep user01 | awk '{print $2}' | xargs`'

bash: -c: line 2: syntax error: unexpected end of file

De xargs heb ik nodig omdat hieruit meerdere processen en pid's volgen..
code:
1
2
3
4
5
6
ssh root@server01.domein.nl \
'for i in $(netstat -ep | grep user01 | awk '{print $9}' | cut -f1 -d/); do kill $i;'

awk: cmd. line:2: (END OF FILE)
awk: cmd. line:2: parse error
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]

[ Voor 15% gewijzigd door Erhnam op 25-01-2005 10:43 ]

http://www.xbmcfreak.nl/


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Wat is er mis met pkill?

  • Paul
  • Registratie: September 2000
  • Laatst online: 01:11
Kun je geen bestandje maken met daarin
code:
1
2
#/bin/bash
kill -9 `ps -eaf | grep "$1" | awk '{print $2}' | xargs`
en aanroepen met
code:
1
2
ssh root@server01.domein.nl \
killuser user01
?

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • frim
  • Registratie: Augustus 2001
  • Niet online
Erhnam schreef op dinsdag 25 januari 2005 @ 10:42:
Lokaal werkt het wel maar via ssh werkt het helaas niet. Ik wil het via ssh laten lopen omdat ik variables in het script ga zetten en meerdere server wil beheren op deze manier. Met en zonder (') werkt het niet.

code:
1
2
3
4
ssh root@server01.domein.nl \
'kill -9 `ps -eaf | grep user01 | awk '{print $2}' | xargs`'

bash: -c: line 2: syntax error: unexpected end of file

De xargs heb ik nodig omdat hieruit meerdere processen en pid's volgen..
code:
1
2
3
4
5
6
ssh root@server01.domein.nl \
'for i in $(netstat -ep | grep user01 | awk '{print $9}' | cut -f1 -d/); do kill $i;'

awk: cmd. line:2: (END OF FILE)
awk: cmd. line:2: parse error
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
Beide gevallen falen omdat je twee instantie's van de ' erin hebtzitten. Je zou de buitenste kunnen vervangen door ""'s of de binnenste escapen (awk \'{print $2}\')

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 07-02 09:48

TrailBlazer

Karnemelk FTW

kijk nou ff naar de post van blaataaps
als ik de manpage lees doet hij in een keer wat je wil.

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
TrailBlazer schreef op dinsdag 25 januari 2005 @ 12:31:
kijk nou ff naar de post van blaataaps

[...]
als ik de manpage lees doet hij in een keer wat je wil.
Het is allemaal iets ingewikkeld als het lijkt. Het zijn namelijk meerdere processen. Op systeem is een user01 aanwezig. Via ssh roep ik eerst een script aan. Dit script kijkt eerst of er een screen draait en start daarna onder root een screen met daarin processen die draaien onder user01. Als ik deze regel uitvoer:
code:
1
ssh root@server01.domein.nl 'pkill -u user01'


Blijft de screen actief.
code:
1
2
3
4
root    3710     1  0 12:47 ?        00:00:00 SCREEN -d -m -S server01 su user01 -c /home/user01/run
user01  3712  3711  0 12:47 pts/0    00:00:00 bash -c /home/user01/run
user01  3719  3712  0 12:47 pts/0    00:00:00 /bin/sh ./etc......
user01  3734  3719  3 12:47 pts/0    00:00:01 ./bin/sh ./etc......

De enige mogelijkheid is dus misschien:
code:
1
kill -9 `ps -eaf | grep user01 | awk '{print $2}' | xargs`

Zo kill hij de processen 3710, 3712, 3719, 3734

[ Voor 14% gewijzigd door Erhnam op 25-01-2005 14:17 ]

http://www.xbmcfreak.nl/


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
iemand nog?

http://www.xbmcfreak.nl/


  • Paul
  • Registratie: September 2000
  • Laatst online: 01:11

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Behalve het probleem dat ik met veel meer onderhoud zit, ik moet namelijk op iedere server aparte bestanden gaan plaatsen, is het ook lastiger met het groot aantal variables die ik in het script heb verwerkt. Het antwoord is dus dat ik het liever allemaal via ssh doorgeef.

http://www.xbmcfreak.nl/


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

code:
1
ps -eaf | grep user01 | awk '{print $2}' | xargs kill -9


?

  • Paul
  • Registratie: September 2000
  • Laatst online: 01:11
Het script op een centrale NFS-mount oid en dan met $1 $2 etc de variabelen invullen?

Zijn het zo ontzettend veel variabelen dan? Hoeveel zijn er dan serverspecifiek en hoeveel zijn er userspecifiek? Serverspecifieke dingen kun je in een bestandje in /etc zetten, als je vaak veel moet doen voor bepaalde users kun je de userspecifieke dingen in dezelfde dir zetten als het script %username%.conf of zo :)

Als je zoveel dingen mee moet geven, is een webbased iets dan niet makkelijker? Ook minder kans op fouten :) Enige probleem is dan wel dat je webbrowser voor een aantal dingen root-rechten moet hebben (zoals het killen van andermans processen)...

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Paul Nieuwkamp schreef op woensdag 26 januari 2005 @ 11:12:
Het script op een centrale NFS-mount oid en dan met $1 $2 etc de variabelen invullen?

Zijn het zo ontzettend veel variabelen dan? Hoeveel zijn er dan serverspecifiek en hoeveel zijn er userspecifiek? Serverspecifieke dingen kun je in een bestandje in /etc zetten, als je vaak veel moet doen voor bepaalde users kun je de userspecifieke dingen in dezelfde dir zetten als het script %username%.conf of zo :)

Als je zoveel dingen mee moet geven, is een webbased iets dan niet makkelijker? Ook minder kans op fouten :) Enige probleem is dan wel dat je webbrowser voor een aantal dingen root-rechten moet hebben (zoals het killen van andermans processen)...
Je slaat de spijker op zijn kop! Dat is ook precies wat ik op dit moment aan het ontwikkelen ben. users, servers, directory's, types (ook voor de user staat nog informatie), zijn dingen die allemaal variable zijn. Het bovenstaande kill commando is ook maar een voorbeeld. Dit wil ik allemaal webbased managen. Daarvoor heb ik een apache server met 'boven normale' rechten opgezet. Via ssh stuurt hij de juiste commando's door naar de betreffende servers.

http://www.xbmcfreak.nl/


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Het is mij gelukt! Dit is het commando:

code:
1
ssh -l root server01.domein.nl "eval kill '\$(ps -ef | grep user01 | cut -f 2 -d\" \")'"

[ Voor 19% gewijzigd door Erhnam op 28-01-2005 10:18 ]

http://www.xbmcfreak.nl/


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Weet iemand of het mogelijk is om deze regel:

ssh -l root server01.domein.nl "eval kill '\$(ps -ef | grep user01 | cut -f 2 -d\" \")'"

te herschrijven zonder het gebruik van dubbele quotes? (ivm het gebruik van php)

http://www.xbmcfreak.nl/


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

mijn oplossing heeft alleen single quotes, maar die werkte niet ofzo?

  • Paul
  • Registratie: September 2000
  • Laatst online: 01:11
Erhnam schreef op maandag 31 januari 2005 @ 15:14:
Weet iemand of het mogelijk is om deze regel:

ssh -l root server01.domein.nl "eval kill '\$(ps -ef | grep user01 | cut -f 2 -d\" \")'"

te herschrijven zonder het gebruik van dubbele quotes? (ivm het gebruik van php)
Je kunt dubbele quotes in PHP toch ook escapen? Ik denk dat je daarvoor in de devschuur moet zijn, nu je bash-probleem is opgelost :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:47

Erhnam

het Hardware-Hondje :]

Topicstarter
Het is mij al gelukt door het toevoegen van extra \\\\!

In ieder geval bedankt!

[ Voor 12% gewijzigd door Erhnam op 01-02-2005 11:05 ]

http://www.xbmcfreak.nl/

Pagina: 1