Seite 1 von 2
opsi-admin cronjob client list
Verfasst: 15 Jun 2016, 14:16
von bademeister
Hallo alle zusammen,
ich bin etwas am Zweifeln meiner Bash-Kenntnisse. Insbesondere in Zusammenhang mit dem opsi-admin.
Das Szenario:
Ich versuche eine Liste von clients (power_clients.txt) nachts mit hostControl_start, _reboot und shutdownwanted mögliche Updates machen zu lassen.
Hier für habe ich ein Bashskript gebaut, welches wie folgt aussieht:
Code: Alles auswählen
while read line
do
opsi-admin -d method setProductActionRequest shutdownwanted $line once
done < /var/lib/opsi/power_clients.txt
Wenn ich den Befehl mit "echo" ausgebe sieht alles sauber aus. In der live-Ausführung bekomme ich jedoch folgende Meldung:
Code: Alles auswählen
root@opsi:/usr/local/bin# ./shutdown.sh
[2] Traceback: (Logger.py|765)
[2] line 1661 in '<module>' in file '/usr/bin/opsi-admin' (Logger.py|765)
[2] line 355 in 'main' in file '/usr/bin/opsi-admin' (Logger.py|765)
[2] ==>>> Failed to execute u"method setProductActionRequest shutdownwanted client1.example.com once 'client2.example.comclient3.example.comclient4.example.comclient5.example.com'": setProductActionRequest() takes exactly 4 arguments (5 given) (opsi-admin|1671)
Kann mir da jemand weiterhelfen?
Vielen Dank.
Re: opsi-admin cronjob client list
Verfasst: 15 Jun 2016, 14:35
von dkoch
bademeister hat geschrieben:
Code: Alles auswählen
opsi-admin -d method setProductActionRequest shutdownwanted $line once
Code: Alles auswählen
[2] ==>>> Failed to execute u"method setProductActionRequest shutdownwanted client1.example.com once 'client2.example.comclient3.example.comclient4.example.comclient5.example.com'": setProductActionRequest() takes exactly 4 arguments (5 given) (opsi-admin|1671)
Siehst du deinen Fehler ? Wieso das so ist kann ich dir allerdings nicht sagen. Nach "once" kommt bei dir "'client2.example.comclient3.example.comclient4.example.comclient5.example.com'" als Argument
Re: opsi-admin cronjob client list
Verfasst: 15 Jun 2016, 15:23
von bademeister
Was passiert ist mir soweit auch klar. Das Problem ist wie du schon sagtest: Warum das so ist.
Denn wie gesagt, wenn ich den Befehl so ausgebe:
Code: Alles auswählen
echo opsi-admin -d method setProductActionRequest shutdownwanted $line once
Bekomme ich die gewünschte Ausgabe.
Re: opsi-admin cronjob client list
Verfasst: 15 Jun 2016, 21:22
von GEI
bademeister hat geschrieben:
Code: Alles auswählen
echo opsi-admin -d method setProductActionRequest shutdownwanted $line once
ich hab´s mal nachgestellt... kleiner WorkAround mit Redirection in Line 5 hilft
Code: Alles auswählen
#!/bin/bash
while read line
do
echo $line
opsi-admin -d method setProductActionRequest shutdownwanted $line once & > xx.log
done < ./power_clients.txt
Re: opsi-admin cronjob client list
Verfasst: 15 Jun 2016, 21:36
von bademeister
Witzig... bin gerade auch dran und kam aufs selbe.
Ist leider nicht zuverlässig. Funktioniert nicht immer.
Insbesondere nicht bei hostControl_start

Re: opsi-admin cronjob client list
Verfasst: 15 Jun 2016, 21:53
von ueluekmen
So eine Konstruktion sieht man auch selten in bash. Mit Umleitungen Allgemein muss man sich schon richtig beschäftigen, dass ist eine kleine Wissenschaft für sich.
Das geht viel eleganter und auch zuverlässiger, wenn jede Zeile der Datei einen Client-fqdn hat dann geht sowas:
Code: Alles auswählen
for client in $(cat clients.txt); do echo opsi-admin -d method setProductActionRequest shutdown wanted $client once; done
Das Ergebnis mit meiner Datei sieht so aus:
Code: Alles auswählen
opsi-admin -d method setProductActionRequest shutdown wanted test-111.vmnat.local once
opsi-admin -d method setProductActionRequest shutdown wanted test-112.vmnat.local once
Das ganze geht natürlich viel flexibler und effizienter mit anderen mitteln, aber man kann mit sowas schon verdammt viel basteln

Re: opsi-admin cronjob client list
Verfasst: 16 Jun 2016, 10:47
von bademeister
Mit echo vor dem Befehl hat es ja immer funktioniert wie gewünscht.
Erstaunlicherweise läuft es mit der Vorschleife jetzt auch ohne echo und es werden nicht mehr alle clients in den ersten Aufruf geparsed.
Vielen Dank. Gibt doch noch sooo viel zu lernen...
Re: opsi-admin cronjob client list
Verfasst: 16 Jun 2016, 10:53
von ueluekmen
Das ist ja auch der Reiz, man lernt nie aus. Egal seit wie viel Jahren man das schon macht, es gibt immer etwas zu lernen

Re: opsi-admin cronjob client list
Verfasst: 16 Jun 2016, 11:27
von dkoch
Was hier in jedem Aufruf passiert ist:
Code: Alles auswählen
opsi-admin -d "method setProductActionRequest shutdownwanted client1.example.com once" < power_clients.txt
daher kommt die Verkettung.
Re: opsi-admin cronjob client list
Verfasst: 04 Jul 2016, 08:15
von bademeister
Guten Morgen,
ueluekmen hat geschrieben:
Das ganze geht natürlich viel flexibler und effizienter mit anderen mitteln, aber man kann mit sowas schon verdammt viel basteln

Da würde ich gern nochmal kurz drauf zurück kommen.
Was für andere Mittel sind da gemeitn?
Viele Grüße,
Felix