Script aus Script heraus aufrufen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Lebowski23
Beiträge: 90
Registriert: 30.12.2009 14:13:24

Script aus Script heraus aufrufen

Beitrag von Lebowski23 » 13.05.2010 21:37:01

Hallo,
während der Installation holt sich der Client eine Datei vom Server, in der die Namen der Scripte stehen, die er abarbeiten muss. Die Datei wird dann folgendermaßen durchlaufen

Code: Alles auswählen

while read line; do
	wget $URL_postinstall$line
	chmod +x $line
	./$line
done < todo.txt
Jedes script für sich funktioniert, und auch der Code von oben funktioniert gut, Probleme gibt es aber dann, wenn die Ausführung eine Scriptes ziemlich lange dauert. Dann wird nach der Ausführung eines solchen Scriptes direkt abgebrochen? Weiß jemand warum?

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: Script aus Script heraus aufrufen

Beitrag von Six » 14.05.2010 07:51:07

Meinst du mit lange >60 Minuten? Ich hatte auch mal so ein Problem und habe keine Lösung gefunden. Ich habe dann klein beigegeben und mein Skript in kleinere Skripte zerlegt. Richtig ist das aber sicher nicht.
Be seeing you!

Lebowski23
Beiträge: 90
Registriert: 30.12.2009 14:13:24

Re: Script aus Script heraus aufrufen

Beitrag von Lebowski23 » 14.05.2010 08:52:10

Mit lang meine ich ca. 1min,

Dann brich er die Schleife ab.

Lebowski23
Beiträge: 90
Registriert: 30.12.2009 14:13:24

Re: Script aus Script heraus aufrufen

Beitrag von Lebowski23 » 14.05.2010 09:12:28

Hallo,
ich hab's jetzt so gelöst:

Die Vorgeschichte:
Ich preseede die Installation mehrerer Clients. Teilweise müssen aber andere postinstall scripts laufen (für xorg, Pakete, etc.) Als postinstall script holt sich der Client nun zunächst das script first.sh vom Server. Dieses holt dann die Datei define_host.csv, in der es einen Abschnitt ALL und einen Abschnitt für jeden Client (hostname) gibt. In diesem stehen jeweils die Scripte, die noch ausgeführt werden müssen.
Im ersten Schritt, sucht das script dann den Abschnitt ALL und <hostname>, so das er die dateinamen für die scripte hat.
Meine erste Idee war, diese in eine txt-Datei zu schreiben, und diese Datei wie in meinem ersten Beitrag beschrieben, abzuarbeiten.
Jetzt habe ich das script so abgeändert, dass es in eine Datei todo.sh zunächst #!/bin/sh schreibt und dann Zeile pro Zeile

Code: Alles auswählen

source <scriptname>
Das script first.sh ruft dann mit den letzten Atemzügen chmod +x todo.sh und dann sh todo.sh auf.
Das funktioniert, obwohl ein bißchen quick und dirty..

Benutzeravatar
ThorstenS
Beiträge: 2875
Registriert: 24.04.2004 15:33:31

Re: Script aus Script heraus aufrufen

Beitrag von ThorstenS » 14.05.2010 09:39:16

Dein Setup wächst ja so langsam in Bereiche, in denen du dir so langsam mal cfengine2 anschauen solltest.
Dort kannst du ganz einfach sagen, dass der Host ClientAti-15 in den cfengine2-Klassen X, ATI, LVM und LiDE60_Scanner ist.
In diesen Klassen kannst du dann configs bearbeiten, Pakete installieren - oder einfach nur deine Shellscripte aufrufen.

Deine Lösung mit der csv-Liste ist pragrmatisch und funktioniert jetzt anscheinend. Wenn du aber dieses System über Jahre pflegen und erweitern willst, kommst du irgendwann an einen Punkt, wo cf2 einfacher gewesen wäre.

Lass dich nicht abschrecken, du musst nicht unbedingt ein server/client Setup aufsetzen für cf2. Du kannst die Dateien im late-Bereich deines Installers auch per wget kopieren und auf dem Client unter /var/lib/cfengine/inputs entpacken. Beim 1. Boot rufst du dann cfagent auf und der rödelt einmal über alles drüber.

Seinen großen Vorteil gegenüber deinem Setup spielt cf2 dann aus, wenn du bei allen Clients nachustieren willst.
I.d.R sind cf Anweisungen indempotent, d.h. auch nach 15 maliger Ausführung ändert sich der Zustand nicht weiter. Auf gut Deutsch: Wenn die config nach dem ersten Lauf der Vorgabe entspricht, wird sie danach nicht mehr angefast oder erweitert.
Es gibt Leute, die lassen cfengine2 stündlich laufen und sammeln nebenher noch Daten ein um Anomalien zu erkennen und reporten darüber. Das wäre dann aber schon ein großes Setup ;-)

Hier ist ein Praxissetup beschrieben: http://kaldor.vwl.uni-hannover.de/karl/ ... engine.php

Antworten