Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Skript, das bestimmte Prozesse für bestimmte User killt

Frage Linux Linux Tools

Mitglied: Mirkandol

Mirkandol (Level 1) - Jetzt verbinden

11.09.2008, aktualisiert 12.09.2008, 5128 Aufrufe, 16 Kommentare

Hallo,

ich habe hier folgendes Setup. Es gibt 2 VNC Server, die auf OpenSuSe 10.3 laufen und auf denen sich jeweils ca. 50 User tummeln.
Hin und wieder kommt es dabei zu Abstürzen einzelner Prozesse. Sehr beliebt ist bspw. ein Crash vom Firefox.

Ich habe bereits xkill eingebunden und damit kann der noch sichtbare FF Prozess auch vom User selber abgeschossen werden, aber meistens verbleibt noch ein versteckter toter Prozess, der davon nicht erfasst wird.

Ich brauche also ein Skript, das den Usernamen des gerade angemeldeten VNC Users herausfindet und alle Firefox-Prozesse, die zu diesem User gehören, abschießt. Ich will das Skript dann in icewm einbinden, damit die Leute nicht dauernd zum Prozess killen anrufen.

Kann mir da jemand weiterhelfen? Ich erwarte auch kein fertiges Skript (obwohl ich mich natürlich nicht dagegen wehren würde ;) ), aber da meine Skriptingfähigkeiten ungefähr so gut sind, wie die Doppelklickfähigkeit meiner Mama, ;) bräuchte ich zumindest ein paar Lösungsansätze.

Vielen Dank
Sven
Mitglied: theton
11.09.2008 um 19:32 Uhr
01.
kill -9 `ps awxu | grep firefox | grep numerische-UID-des-users | awk '{print $2}'`
Die Backticks beachten.
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 09:20 Uhr
Vielen Dank dir @theton. Damit kann ich schon viel anfangen.
Ich werde noch schauen, dass ich die UID des Users ebenfalls dynamisch auslese. Denn es ist ja ein VNC-Server und ich will das Skript nicht für jeden Nutzer einzeln einbinden, sondern allgemeingültig für alle jetztigen und künftigen User bereitstellen.

Ich schau mal wie weit ich komme.

Vielen Dank dir nochmal @theton
Bitte warten ..
Mitglied: theton
12.09.2008 um 09:41 Uhr
Ich bin kein Freund von Bash. Hier mal eine Beispiel-Lösung in Perl:

01.
#!/usr/bin/perl -w 
02.
 
03.
# UID mit Hilfe von 'whoami' und der /etc/passwd ermitteln 
04.
 
05.
# Username ermitteln 
06.
my $username = `whoami`; 
07.
# Zeilenumbruch entfernen 
08.
chomp($username); 
09.
# Zugehoerige Zeile aus der /etc/passwd holen 
10.
my $tmp = `grep $username /etc/passwd`; 
11.
# Zeile in ein Array splitten 
12.
my @temparr = split(/:/, $tmp); 
13.
# der 3. Wert im Array enthaelt die numerische UID 
14.
my $uid =  $temparr[2]; 
15.
 
16.
# Befehl zusammenbasteln 
17.
my $cmd = "kill -9 `ps awxu | grep firefox | grep $uid | awk '{print \$2}'`"; 
18.
# Befehl ausfuehren 
19.
my $out = `$cmd`; 
20.
# ggf. Output des Befehls ausgeben 
21.
print $out; 
22.
 
23.
exit 0;
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 09:56 Uhr
Nochmal danke sehr. Aber wenn ich das Script richtig verstehe, dann ist zumindest der Username fest verdrahtet und ich müsste für mind. 100 User eine eigene Version einbinden.

Mein Ziel ist es, dass alles vollautomatisch läuft, um den Verwaltungsaufwand so gering wie möglich zu halten.

Ich hab gerade den Befehlt "id" nachgeschlagen, der auch die uid, die gid und die groups anzeigt. Aus dieser Ausgabe müsste ich die nackte UID extrahieren. Bin noch am nachschlagen ;)


edit: OK. Ich habs gecheckt ;) Vielen Dank. Ich probiers gleich aus *hehe*
Bitte warten ..
Mitglied: theton
12.09.2008 um 10:12 Uhr
Der Username wird mittels 'whoami' eingelesen. 'whoami' gibt den Namen des aktuellen Benutzers aus. Das Skript sollte somit bei jedem User funktionieren. Lediglich der Programmname ist fest drin, aber auch das könnte man zur Not via Parameter abfragen.
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 12:30 Uhr
Also das Script läuft super und erfüllt auch einwandfrei seinen Zweck, soweit ich das bisher sehen konnte.
Ich hab nur das Problem, dass es nur als root läuft, aber nicht als User. Wenn ich es als normaler User ausführe, dann passiert einfach nichts. Sobald ich ein sudo davorhänge und das PW eintippe gehts.

Auch Spielereien mit den Gruppenzugehörigkeiten haben nicht zum Erfolg geführt.
Ich rufe das Script mit der perl bin auf, wüsste auch nicht wie es sonst gehen könnte. Auch das Einpacken des Perl-Aufrufs in ein Shell-Script bringt keine Besserung.

Woran kann das liegen?


edit: Das Script ist ausführbar und ich hab als Owner auch einen Testuser eingetragen, aber es geht trotzdem nicht. Seine eigenen Prozesse kann dieser User aber manuell abschießen. An diesen Rechten kanns auch nicht liegen. Ich bin ratlos
Bitte warten ..
Mitglied: theton
12.09.2008 um 12:36 Uhr
Das könnte z.B. daran liegen, dass die /etc/passwd nicht für Benutzer lesbar ist. Die Rechte auf die /etc/passwd sollten so aussehen:

01.
-rw-r--r-- 1 root root 2,0K 2008-08-27 08:03 /etc/passwd
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 12:38 Uhr
Das hatte ich auch bereits getestet. Aber das Auslesen der passwd klappt wunderbar.
Bitte warten ..
Mitglied: theton
12.09.2008 um 12:59 Uhr
Ggf. mal $cmd mittels 'print' ausgeben und schauen ob der Befehl, der zusammengebaut wird, korrekt ist.
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 13:16 Uhr
Ich werds gleich testen, aber wie gesagt. Wenn ich noch ein sudo davorhänge, dann macht er genau das, was erwartet wird.

Ich gehe also davon aus, dass das Script korrekt ist und das ganze ein Berechtigungsproblem ist. Mich irritiert allerdings, dass bei der sudo-Variante ein "Getötet" ausgegeben wird. o.O
Wo kommt der Begriff denn her? Denn wenn ich einfach so einen Kill per Konsole mache, dann läuft das geräuschlos ab.

Ich bin immer verwirrter.
Bitte warten ..
Mitglied: theton
12.09.2008 um 13:25 Uhr
Ob dieses "getötet" ausgegeben wird, hängt von den Einstellungen der Shell ab. Wird evtl. eine restricted Shell verwendet? Was passiert z.B., wenn du mal $cmd direkt auf der Shell des Users ausführst? Bei mir funktioniert das Skript jedenfalls auch mit normalen Benutzer-Accounts.
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 13:43 Uhr
Also ich bin jetzt restlos am Ende mit meinem Latein. Ich habe ein "print $cmd" ins perlscript gepackt und dann die Ausgabe des Befehls kopiert und manuell in die Konsole gehackt:
01.
kill -9 `ps awxu | grep firefox | grep 1076 | awk '{print $2}'`
Als Ergebnis kam dann
01.
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Wenn ich noch ein sudo vor den kill-Befehl setze, dann kommt:
01.
Passwort:  
02.
kill: keine Prozess-ID angegeben 
03.
„kill --help“ gibt weitere Informationen.
Aber wenn ich das ganze Script mit sudo ausführe, dann gehts. :confused:
Bitte warten ..
Mitglied: theton
12.09.2008 um 13:48 Uhr
Scheinbar ist die Ausgabe von

01.
ps awxu | grep firefox | grep 1076 | awk '{print $2}'
beim Benutzer anders als bei root. Ggf. muss mittels awk ein anderes Feld ausgegeben werden. Wie sieht der Output von 'ps awxu | grep firefox | grep 1076' aus?
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 14:07 Uhr
Danke. Das war der entscheidende Hinweis. Bei der Ausgabe gefiltert nach UID kam gar kein Ergebnis raus. Und dann ist mir aufgefallen, dass bei ps awxu nach den Usernamen sortiert wird.
Also habe ich im Perl-Script in der entscheidenden Zeile das $uid ersetzt durch $username und schon gings.
Mich wundert nur gerade bei genauerem Nachdenken, wieso das vorher mit sudo funktioniert hat. Denn eigentlich sollte der Kontext des Befehls ja dann root sein. Und damit auch die UID=0.
Wie kann es dann sein, dass beim Testuser die Firefoxfenster geschlossen wurden, wenn er ja eigentlich nur die mit der pasenden UID abschießen sollte?
Bitte warten ..
Mitglied: theton
12.09.2008 um 14:13 Uhr
root kann ja auch Prozesse anderer User killen und evtl. hat er deswegen dann einfach die UID ignoriert und einfach alles abgeschossen, wo firefox im Prozessnamen stand.
Bitte warten ..
Mitglied: Mirkandol
12.09.2008 um 14:16 Uhr
Na klar. So muss es sein. Er hat alle Firefoxprozesse abgeschossen, bei denen in der ps awxu eine 0 in der Ausgabe vorkam. Bspw. 1076 für den Testuser.
OMG! Ein Wunder, dass sich niemand beschwert hat ;)

Aber dennoch. Vielen Vielen Dank für deine tolle Hilfe @theton!

Ich setze mal auf erledigt.

Schönen Gruß
Sven
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Netzwerk
Einzelne Drucker per GPO an bestimmte User freigeben? (8)

Frage von Stefan007 zum Thema Windows Netzwerk ...

Windows Server
Proxy für alle User adden - Skript geht nicht (Windows Server) (4)

Frage von bytetix zum Thema Windows Server ...

Windows 7
Gruppenrichtlinie für User auf andere Rechner übertragen (1)

Frage von Robmantuto zum Thema Windows 7 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...