Geniale Idee. Ich werde das mit cron machen. Danke für die Hife. By Olli Am Don, 2003-03-20 um 21.26 schrieb Jan Trippler:
On Don, 20 Mär 2003 at 11:57 (+0100), Bernd Brodesser wrote: [...]
#!/bin/bash
while true do for each in *.ps do ps2pdf $each `basename $each .ps`.pdf && rm $each || exit 1 done sleep 5 done
Ich habe noch eine Abbruchbedingung eingebaut, fall was schief läuft, es sollte aber auch noch ein trap eingebaut werden um z.B ein CTRL-C abzufangen und aufzuräumen und dann erst abbrechen.
Den exit 1 halte ich für unglücklich. Es soll ja eine Endlos-Schleife sein und da sollte das Fehlschlagen _eines_ ps2pdf nicht gleich zum Abbruch des ganzen Scripts führen. Da ist IMHO noch ein wenig Error-Handling nötig (z. B. ein df, um prüfen zu können, ob das Dateisystem voll ist; dann sollte nämlich tatsächlich abgebrochen werden).
Ich habe einen anderen Vorschlag, der das Teil (wenn es ein unbeaufsichtigter Langläufer werden soll) IMHO etwas robuster macht: Du kannst nie 100% sicher sein, dass Dein Script nicht aus irgendeinem Grund abschmiert. Dann musst Du es in Deiner Version immer neu starten. Warum nicht cron dafür nutzen? Dann brauchst Du auch die while-Schleife nicht. Richte einen crontab-Job ein, der das Script jede Minute startet, dann macht auch ein Abbruch eines Prozesses nix aus.
Variante 1: Es können gern mehrere Prozesse parallel laufen (erhöht auch gleich den Durchsatz - allerdings auch die Systemauslastung)
<schnipp> #! /bin/bash
# FS mehr als 90% gefuellt: Abbruch `df /mein/dateisystem | tail -1 | \ sed 's/^.*[^0-9]\([0-9]*\)%.*$/\1/'` -ge 90 && exit 1
# Verarbeitungsschleife for f in *.ps; do test -f "$f" && ps2pdf "$f" "`basename \"$f\" .ps`.pdf" && rm "$f" done <schnapp>
Die zusätzliche Abfrage *test -f "$f"* deshalb, weil ein evtl. parallel laufender Prozess die Datei zwischenzeitlich verarbeitet haben könnte.
Variante 2: Es kann nur einen geben.
<schnipp> #! /bin/bash
# FS mehr als 90% gefuellt: Abbruch test `df /mein/dateisystem | tail -1 | \ sed 's/^.*[^0-9]\([0-9]*\)%.*$/\1/'` -ge 90 && exit 1
# Abbruch-Handling lock=/var/run/my_prog trap "rm $lock; exit 1" 1 2 3 15
# Lockfile existiert und sperrender Prozess lebt noch test -f $lock && ps -p `cat $lock` >/dev/null && exit 0
# Lockfile anlegen echo $$ >$lock
# Verarbeitungsschleife for f in *.ps; do ps2pdf "$f" "`basename \"$f\" .ps`.pdf" && rm "$f" done
rm $lock <schnapp>
Alles so gut wie ungetestet.
Jan
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com