|
Heinrich_Schwietering
Wikiteam
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Bastele ja immer noch mit crontab herum, dabei ist mir folgendes aufgefallen: Wenn ich aus einem Bash-Skript heraus einen Crontab-Eintrag mit crontab <Doublette.txt> aufrufe, wird zwar der Inhalt von Doublette.txt brav als meine crontab-Datei gespeichert, allerdings bleibt eine "Sicherungsdatei" "Doulette.txte" zurück, also nicht mit angehängter Tilde sonder direkt folgendem e. Nicht weiter dramatisch, aber zumindest für mich doch merkwürdig. Dasselbe passiert, wenn ich aus einem Skript heraus crontab mit einem Editor aufrufe; in diesem Falle ein kleines skript, was einen crontab-Eintrag aus einer Steuerdatei ausliest und an die crontab-Datei anhängt, also EDITOR=Mein_Skript.sh crontab -e. Es bleibt eine wieder eine "Sicherungsdatei" usere, mit angehängtem e zurück. Und da wirds doch schon etwas mulmiger - was, wenn ich die user adrian und adriane hätte? Adrianes Datei wäre ruckzuck überschrieben... Liegt es an meinen Skript-Aufrufen? Ist es ein Bug? so long hank
|
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
|
Heinrich Schwietering schrieb: Liegt es an meinen Skript-Aufrufen? Ist es ein Bug?
Von dem Problem habe ich noch nie etwas gehört. Mir scheint es komisch, in einem Skript den Befehl crontab aufzurufen. Was genau möchtest Du machen? Wäre "at" nicht eine bessere Alternative? Gruss Dirk
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Theoretisch wäre at schon möglich, aber in der Praxis funktioniert das ganze für meinen Einsatzzweck nicht. Ich habe ein Skript gebaut, mit dem man aus dem TV-Browser heraus Aufnahmen programmieren, oder auch Zappen kann (Skripte/DVB-T-Aufnahmen aus dem TV-Browser starten); dafür benötige ich die "automatisierte" Bearbeitung meiner crontab-Datei. Es funktioniert ja auch (die im Wiki beschriebene erste Version verwendet "crontab Doublette.txt", aus dem die crontab-Datei jeweils neu geschrieben wird, und bastele gerade noch an einer Version, die mit "EDITOR=CronEdit.sh crontab -e" arbeitet (geht auch schon ganz gut) aber ich bin dabei über diese seltsamen Dateien gestolpert. Eine andere seltsame Sache passiert dabei auch noch: Eigentlich soll ja eine crontab-Datei am Ende eine Leerzeile enthalten; allerdings finde ich keine Systematik dahinter, wann sie tatsächlich gebraucht wird, und wann nicht. Die mit "crontab Doublette.txt" erstellten crontab-Dateien haben keine Leerzeile am Ende, funktionieren aber; wenn ich welche mit EDITOR=meinkript.sh crontab -e erstelle, und dort dann die Infos aus einer Datei mit Leerzeile am Ende hochlade, funktioniert es nicht, trotz Leerzeile. Wenn ich diese dann mit gedit lösche, und dann eine neue erstelle, geht es... Um dem ganzen die Krone aufzusetzen: Wenn ich zunächst eine "unautorisierte" Veränderung an meiner crontab vornehme und zwei Zeilen anhänge (eine mit dem Job, eine weitere mit Unsinn), und dann mit "EDITOR=meinskript crontab -e" die zweite Zeile wieder entferne ( sed ie /^'"Anfang der falsche Zeile".*"/d ) ist die Zeile weg, auch keine Leerzeile mehr da, und der Job wird ordnungsgemäß ausgeführt 😲 . Die Zeile im aufrufenden Skript sieht so aus:
| CronEdit.sh ${1} ${2} ${3} ${4} ${5} "$TITEL" ${6} $AUSWAHL && EDITOR=CronEdit.sh crontab -e
|
das Skript, das aufgerufen wird so:
| # "Unautorisiertes" Anhängen des Eintrages aus den Aufruf-Argumenten
echo ${1} ${2} ${3} ${4} \* tvbrowserWahlEdit.sh ${5} \"${6}\" ${7} ${8} >>/var/spool/cron/crontabs/<user>
# Löschen des Fehleintages, dadurch wird gleichzeitig die erste Änderung "autorisiert"
sed -ie '/^'"\/tmp\/crontab"'.*/d' /var/spool/cron/crontabs/<user>
exit
|
so long hank
|
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
|
Heinrich Schwietering schrieb: Theoretisch wäre at schon möglich, aber in der Praxis funktioniert das ganze für meinen Einsatzzweck nicht.
Wie geschrieben, ich kann Dir leider beim eigentlichen Problem nicht helfen. Allerdings würde ich einen Job in die Crontab schreiben, der minütlich prüft, ob eine bestimmte Aufnahme gestartet werden soll und diese dann startet. Dazu müsste Dein Skript nur in einer Konfigurationsdatei Einträge vornehmen und nicht gleich in der Crontab. Gruss Dirk
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Lux schrieb:
Wie geschrieben, ich kann Dir leider beim eigentlichen Problem nicht helfen.
Schade eigentlich... Allerdings würde ich einen Job in die Crontab schreiben, der minütlich prüft, ob eine bestimmte Aufnahme gestartet werden soll und diese dann startet. Dazu müsste Dein Skript nur in einer Konfigurationsdatei Einträge vornehmen und nicht gleich in der Crontab.
Das Skript müsste dann aber wohl oder übel über at laufen, oder verstehe ich dich da falsch? Und atd läuft ja sowieso, da brauche ich doch keinen Crontab-Eintrag für 😕 Oder hab ich dich da missverstanden? Naja, vielleicht muss ich dann doch versuchen, dieses Perlskript aufzubohren, und da noch eine Variable mehr reinzudrücken; damit gibt es keine Probleme mit seltsamen Sicherungsdateien (sind mir zumindestens noch nicht aufgefallen...) so long hank
|
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
|
Heinrich Schwietering schrieb: Das Skript müsste dann aber wohl oder übel über at laufen, oder verstehe ich dich da falsch? Und atd läuft ja sowieso, da brauche ich doch keinen Crontab-Eintrag für 😕 Oder hab ich dich da missverstanden?
Nein gar nicht, Du machst einfach einen Eintrag
* * * * * /pfad/zu/deinem/skript.bash
in die Crontab des Users, der das ausführen soll. Und in die Konfigurationsdatei:
20090901-1100 sat1
(oder was Du auch immer an Parametern brauchst) Dann kannst Du im Skript einfach schreiben.
| while read zeit kanal
do
if [[ "${zeit}" = "$(date +%Y%m%d-%H%M)" ]]
then
nimm ${kanal} auf
fi
done < konfigurationsdatei
|
Schön wäre es, wenn die Zeile dann auch noch in der Konfigurationsdatei gelöscht wird, das geht mit
sed -i "s/$(date +%Y%m%d-%H%M)/d" konfigurationsdatei Gruss Dirk
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Sehr elegant! 👍 Danke! Muss ich demnächst mal drangehen, und zusehen, wie ich das so über das TV-Browser-Aufnahme-Plugin gebacken bekomme. Ich habe gestern noch eine "ähnliche" Lösung zusammengebaut, indem ich doch noch das besagte Perlskript (das Crontab::Config verwendet) angepasst hab. Es wird jetzt per Bash-Skript aufgerufen (mit integrierter Auswahl, ob aufgenommen, nur wiedergegeben oder beides (naja, fast) gleichzeitig passieren soll). Dabei werden ganz "ordnungsgemäße" crontab-Einträge erstellt, und bei Ende der Aufnahme oder Löschen der Aufnahme-Daten aus dem TV-Browser heraus wieder entfernt. Viele Wege führen nach Rom... so long hank
|
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
|
Heinrich Schwietering schrieb: Viele Wege führen nach Rom...
Das ist das schöne an unserem Lieblingssystem ... ☺ Hoffe, es hilft Dir etwas. Gruss Dirk
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Funktioniert jetzt alles bestens! Hatte zunächst etwas Schwierigkeiten, weil ich die Titel der Sendungen mit Leerzeichen als read-Aufruf nicht am Ende der Liste stehen hatte; hat mich einige graue Haare gekostet (oder eher eingebracht 😉 ) bis ich auf den Trichter kam warum es mal ging (nämlich bei Ein-Wort-Titel), und mal nicht... Das Löschen der Einträge geht bei mit
| sed -ie '/^'"${ZEIT}".*'$/ d' Konfigurationsdatei
|
problemlos über die Bühne. Für mich stellt sich jetzt die Frage, wie "gefährlich" die Skript-Aufrufe von "crontab <filename>" sind, und ob ich sie im Wiki durch unsere neue Lösung ersetzen sollte; eleganter ist die Lösung mit dem minütlichen Abfragen allemale. Naja, werd' ich auch mal in der Wiki-Artikel-Diskussion anbringen, da werd' ich meine neue Lösung erstmal vorstellen. Also nochmal besten Dank in die Schweiz! so long hank PS: Gibts für "read" keine manpage?
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Mir fällt zum Anfangsproblem noch was auf: Kann es sein, dass Sicherungsdateien von Sicherungsdateien angelegt werden? Oder, wenn die ~-Endung schon belegt ist, stattdessen ein "e" angehängt wird? Wenn ich mir die Erstell-Zeiten der <name>e-Dateien so anschaue, sind sie mit einer neuen <name>-Datei erstellt worden, als schon eine <name>~-Datei existierte... so long hank
|
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
|
Heinrich Schwietering schrieb: Funktioniert jetzt alles bestens! Hatte zunächst etwas Schwierigkeiten, weil ich die Titel der Sendungen mit Leerzeichen als read-Aufruf nicht am Ende der Liste stehen hatte; hat mich einige graue Haare gekostet (oder eher eingebracht 😉 ) bis ich auf den Trichter kam warum es mal ging (nämlich bei Ein-Wort-Titel), und mal nicht...
👍
Für mich stellt sich jetzt die Frage, wie "gefährlich" die Skript-Aufrufe von "crontab <filename>" sind, und ob ich sie im Wiki durch unsere neue Lösung ersetzen sollte; eleganter ist die Lösung mit dem minütlichen Abfragen allemale.
Ich denke nicht, dass die Crontab-Aufrufe gefährlich sind ... Du kannst auch so etwas bauen wie | crontab -l > datei
echo "0 10 10 10 1 aufnehmen" >> datei
crontab datei
|
Allerdings musst Du dann auch irgendwie die Corntab wieder aufräumen. Ich persönlich halte nicht so viel davon, Aufträge, die nur ein einziges Mal laufen sollen, über die Crontab abzuwickeln. Ich verstehe die Philosophie hinter Cron anders. Eleganter ist in jedem Fall nur einen Job zu haben, der zur angegebenen Zeit ausgeführt wird und nicht einen zu haben, der jede Minute ausgeführt wird ...
PS: Gibts für "read" keine manpage?
Ist in "man bash" enthalten.
Mir fällt zum Anfangsproblem noch was auf: Kann es sein, dass Sicherungsdateien von Sicherungsdateien angelegt werden? Oder, wenn die ~-Endung schon belegt ist, stattdessen ein "e" angehängt wird? Wenn ich mir die Erstell-Zeiten der <name>e-Dateien so anschaue, sind sie mit einer neuen <name>-Datei erstellt worden, als schon eine <name>~-Datei existierte...
Möglich ist alles 😉 Gruss Dirk
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Lux schrieb:
Für mich stellt sich jetzt die Frage, wie "gefährlich" die Skript-Aufrufe von "crontab <filename>" sind, und ob ich sie im Wiki durch unsere neue Lösung ersetzen sollte; eleganter ist die Lösung mit dem minütlichen Abfragen allemale.
Ich denke nicht, dass die Crontab-Aufrufe gefährlich sind ...
"Gefährlich" ist nicht der richtige Ausdruck, es geht eher um die "Regeln der Kunst", ich als weitgehend theorieunbelasteter "Pragmatiker/Universal-Diletant" mache einfach, aber dabei kann natürlich auch mal was schiefgehen, weil ich nicht immer genau überblicke, was mein Tun für Konsequenzen hat 😉 Du kannst auch so etwas bauen wie | crontab -l > datei
echo "0 10 10 10 1 aufnehmen" >> datei
crontab datei
|
Ja, so in der Art hab' ich das ja in der Wiki-Version gemacht... 🤓 Allerdings musst Du dann auch irgendwie die Corntab wieder aufräumen.
Auch das hab' ich in der Wiki-Version hinbekommen 🤓 🤓 Ich persönlich halte nicht so viel davon, Aufträge, die nur ein einziges Mal laufen sollen, über die Crontab abzuwickeln. Ich verstehe die Philosophie hinter Cron anders.
Eleganter ist in jedem Fall nur einen Job zu haben, der zur angegebenen Zeit ausgeführt wird und nicht einen zu haben, der jede Minute ausgeführt wird ...
Naja, das Problem war ja, dass at mit dem TV-Browser-Aufnahme-Plugin nicht 100% kompatibel ist... (btw: Gibts im Wiki irgendwo was zu at? Alle möglichen Befehle sind ja zu finden, nur zu at find' ich nix...) PS: Gibts für "read" keine manpage?
Ist in "man bash" enthalten.
Danke!
Möglich ist alles 😉
😛 Und wie kommt es dazu, und vor allem: Warum? "Nichts ist unmöglich - alles Ubuntu, oder was?" 😈 😀 so long hank
|
|
Lux
Anmeldungsdatum: 10. November 2005
Beiträge: 5152
|
Heinrich Schwietering schrieb: Naja, das Problem war ja, dass at mit dem TV-Browser-Aufnahme-Plugin nicht 100% kompatibel ist... (btw: Gibts im Wiki irgendwo was zu at? Alle möglichen Befehle sind ja zu finden, nur zu at find' ich nix...)
Von at kenne ich auch nur die manpage.
😛 Und wie kommt es dazu, und vor allem: Warum? "Nichts ist unmöglich - alles Ubuntu, oder was?" 😈 😀
☺ Gruss Dirk
|
|
Heinrich_Schwietering
Wikiteam
(Themenstarter)
Anmeldungsdatum: 12. November 2005
Beiträge: 11335
|
Hi! Nachtrag: Lux schrieb:
Du kannst auch so etwas bauen wie | crontab -l > datei
echo "0 10 10 10 1 aufnehmen" >> datei
crontab datei
|
Das ist natürlich etwas einfacher als meine Lösung; statt crontab-l >datei zu nehmen hab' ich /var/spool/cron/crontabs/<user> in eine Datei umgelenkt, und daran dann die neue Zeile gehängt. Da damit aber auch die Kommentarzeilen am Anfang der crontab-Datei ausgelesen wurden, hab' ich die dann vorm "Hochladen" mit crontab <datei> alle entfernt. Der Schritt sollte damit jetzt wegfallen können. Wieder was an Zeilen gespart! 😉 so long hank
|