thepoweruser
Goto Top

crontab manuell erstellen

Ich habe ein Script geschrieben, welches automatisiert die cron geschrieben wird, wann welcher Script ausgeführt werden sollte zu welcher Zeit. Jedoch funktioniert das ganze einmal nachdem es mit dem folgendem Befehl ausgeführt wurde:

cat>> /var/spool/cron/root <<EOF
$StartMinute $StartHours $StartDay $StartMonat * root /script.sh 
EOF

Danach möchte ich, sobald script.sh fertig durchgelaufen ist wieder aus der crontab automatisch gelöscht haben, jedoch aber nur den Job, welch für den Script benötigt wurde, wenn andere CronJobs vorhanden sind, sollten die anderen CronJobs nicht gelöscht werden.

Ich versuchte es mit diesem Befehl:

 grep -v "$StartMinute $StartHours $StartDay $StartMonat script.sh" /var/spool/cron/root > /var/spool/cron/root.back  
mv -f /var/spool/cron/root.back /var/spool/cron/root 

Beim ersten versuch, sobald die crontab mit dem befehl
 crontab -r 
gelöscht wurde, funktioniert mein Script, bzw. wird ausgeführt, jedoch beim 2. Versuch funktioniert es nicht mehr

Was muss da getan werden?

Content-ID: 119776

Url: https://administrator.de/contentid/119776

Ausgedruckt am: 14.11.2024 um 13:11 Uhr

kimiko
kimiko 06.07.2009 um 10:56:35 Uhr
Goto Top
Wenn die jobs nur einmal laufen sollen, dann at-command.
z.B. at teatime +3 days

ich würde das prinzipiell so machen:
crontab -l > file.txt
echo '* 5 * * * script.sh' >> file.txt  
awk '!/script.sh/ {print}' file.txt   
crontab file.txt
könnte mir vorstellen dass du Probleme mit dem globbing hast.
thepoweruser
thepoweruser 06.07.2009 um 12:04:49 Uhr
Goto Top
ich möchte mein script ergänzen, jedoch komme ich nicht draus was der befehl awk macht als ich den Befehl

 crontab -l > file.txt echo '* 5 * * * script.sh' >> file.txt   

eingegeben habe, konnte kein eintrag in die datei vorgenommen werden, es kam nur die meldung mit der erklärung welche Parameter beim Befehl crontab vorhanden sind.
carg
carg 06.07.2009 um 13:02:57 Uhr
Goto Top
Hi,

warum willst Du denn nicht at verwenden?

Gruß

ps: das Deine Zeile 01. nicht funktioniert ist nicht wirklich verwunderlich - da fehlt ein ; vor dem echo - im übrigen man awk !
thepoweruser
thepoweruser 06.07.2009 um 13:07:31 Uhr
Goto Top
ich arbeite auf VMware ESX Server und dort steht mir kein at zur verfügung

was müsste in Zeile 01 geändert werden damit es funktioniert ich hab da nicht viel ahnung, dieser Vorschlag kommt auch vom user kimiko
carg
carg 06.07.2009 um 13:31:31 Uhr
Goto Top
Hi,

also z.b. so:
am ende vom Script
awk '!/script.sh/ {print}' file.txt > newcrontab.txt
--- Erklärung: /hierstehtwasdusuchst/ das ! bedeutet nicht also printe (stdout) alle Zeilen die NICHT /suchmuster/ enthalten
crontab newcrontab.txt
-- jetzt wird die Crondatei eingelesen OHNE die mit awk ausgeschnittene

Musst halt nur aufpassen, dass Du nichts erwischt was Du noch brauchst also das Suchmuster nur das gewünschte erwischt!

Gruß
thepoweruser
thepoweruser 06.07.2009 um 13:37:41 Uhr
Goto Top
ah ok demfall werde ich das so versuchen. Jedoch auch wenn ich nur das cron Job File /var/spool/cron/root selber anpasse mit dem Script:

 cat>> /var/spool/cron/root <<EOF 
$StartMinute $StartHours $StartDay $StartMonat * root /script.sh EOF 

wird es nur einmal mit Cron Job erfolgreich durch ausgeführt. Weiss da jemand genaueres wieso dies nicht funktioniert mit dem oben genannten Befehl?
carg
carg 06.07.2009 um 14:25:38 Uhr
Goto Top
Hi,

was steht denn an der Stelle von $StartMinute $StartHours $StartDay $StartMonat ?

WAS funktioniert denn noch nicht - sorry - aber Deine Beschreibung was Du willst ist einfach nicht verständlich z.B: "ah ok demfall" was ist den demfall für ein Wort?

Ohne das man erfährt, was bei den Variablen $StartMinute $StartHours $StartDay $StartMonat gesetzt wird, kann Dir keiner die Frage beantworten. Es kann ja z.B. sein das im Monat ne 5 steht .... dann mußte nur ein wenig geduldig sein - schon gehts face-smile
Auch ist ein eventuelles /etc/init.d/crond reload vielleicht nicht wirklich falsch!

Gruß
thepoweruser
thepoweruser 06.07.2009 um 15:26:38 Uhr
Goto Top
Im cron job wird durch den script folgendes eingetragen:

 03 15 6 7 * root /script.sh 

Was noch nicht funktioniert ist, das wenn ich den Script nochmals ausführe um ein Datum welch der Cron Job gestartet werden sollte, dort eintrage, wird der Cron Job nicht mehr estart obwohl die berechtigung chmod 600 die selbe war wie wenn ich mit crontab -e dies eintrage.
kimiko
kimiko 06.07.2009 um 15:52:55 Uhr
Goto Top
vielleicht liegt es an whitespaces, besonders am Zeilenende.
vi sieht den deine cron/root datei aus (in der 2. Version).
diese sternchen * sind nämlich tricky.

mach mal
echo `echo '*'`  
echo '*'  

Gruss
thepoweruser
thepoweruser 07.07.2009 um 08:55:52 Uhr
Goto Top
kann mir jemand erklären wieso ich mittels Befehls cat die crontab neu erstellen kann jedoch beim ändern die cron job nicht mehr anspringt und die gesamte crontab gelöscht und wieder neu angelegt werden muss?

Das problem besteht leider immer noch
carg
carg 07.07.2009 um 10:48:21 Uhr
Goto Top
Hi,
also langsam ....*arrg*

Liest Du eigentlich die Antworten?
/etc/init.d/crond reload
Du mußt cron auch die Gelegenheit geben die Datei neu einzulesen! Ein kill -HUP <pid-von-crond> sollte es auch tun, aber dann mußt Du Dir erst noch die pid raussuchen.

Also nochmal für Dich zum mitdenken.
crontab mit cat etc. wie gewünscht gearbeiten!
DANACH /etc/init.d/crond reload
dann wird es auch klappen
Gruß over and out!

ps.: Du schaffst das ... wirklich ...!