Ich wollte eine regelmässige Datensicherung mittels Cron aufrufen lassen. Das ganze sollte dann mit Afio volle und inkrementelle Backups die Woche über machen. Da das ganze ein Desktopsystem ist, kann aber nicht gewährleistet sein, dass der Rechner läuft, wenn der Zeitpunkt der Ausführung des Cron-Eintrags herankommt.
Die Frage ist also, was macht Cron mit Aufträgen, die es verschlafen hat? Irgendwie habe ich das Gefühl, dass die dann verloren gehen. Allerdings sagt weder man cron noch die wunderschöne FAQ, die ich zu Cron gefunden habe etwas konkretes dazu.
hi,
also wenn du das backup-script in /etc/cron.daily/ ablegst, sollte er das script ausführen egal wie lang der rechner läuft. je nachdem welchen crondaemon du installiert hast zb. um kurz nach mitternacht oda falls der rechner da nicht lief so blad der rechner gebootet wird. ein anderer crond führt auch gern die jobs um 6:00 uhr morgens aus…
fejf
Hallo Thomas,
dein Gefühl trügt dich nicht. Der vixie-crond, der auf den meisten Systemen per Default installiert ist, holt verpasste Jobs nicht nach. Es gibt aber andere cron Daemons, die das können. Einfach mal bei freshmeat [2] stöbern.
Sofort gefunden habe ich den fcron [2], der explizit mit diesem Feature wirbt. Hab ihn aber noch nicht ausprobiert.
Grüße,
Jörg
Hallo Jörg,
es ist der vixie-crond installiert. Danke für den Hinweis auf andere cronen. Das beim fcron klingt schon recht interessant, allerdings weiss ich nicht, ob mir das wirklich was nützt. Wenn beispielsweise Sonntags ein volles Backup gemacht werden sollte und das in dem Script aus dem Datum so ermittelt wird, dann nützt es wahrscheinlich nix, wenn das cron den versäumten Eintrag am Montag ausführt. Wird wahrscheinlich doch das beste sein, die ganze Sache etwas aufwändiger in diesem Script zu gestalten, sprich immer schön zu überprüfe, ob es ein volles zu dem gewünschten inkrementellen Backup gibt.
Viele Grüße
Ein anderer cron daemon, der mit diesen Problem typischerweise zurechtkommt, ist anacron [1]. Vielleicht ist es besser, Du machst zwei cronjobs, einen wöchentlichen, der das Fullbackup macht, und einen täglichen, der das incremental macht.
Ansonsten ist noch ein üblicher Trick, eine Datei mit Datumsstempel zu “touchen”, um anzuzeigen, dass der entsprechende Task für einen bestimmten Tag schon gelaufen ist:
#!/bin/sh STAMPDIR=/var/log STAMPFILE=${STAMPDIR}/daily_backup_stamp TODAYSTAMPFILE=${STAMPFILE}.`date +%Y-%m-$d` if [ -f ${TODAYSTAMPFILE} ]; then # ist heute schon mal gelaufen exit 0 fi # müssen wir noch machen # erst alte STAMPFILE aufräumen /bin/rm ${STAMPFILE}.* /mache/dein/backup if [ $? -eq 0 ]; then # war alles ok, dann merken wir uns das touch $TODAYFILE fi Und dieses script führst Du mit dem ganz normalen cron einfach alle 15 Minuten oder so aus.
Übrigens: Rechner nicht bei laufendem Backup abschalten ;-)
Hallo Georg,
das bereits erwähnte fcron behauptet von sich, anacron- und cronfunktionalität zu verbinden. Aber ansonsten geht dein Vorschlag schon in die Richtung, die ich mir so vorgestellt habe. Ich werde mal versuchen was adäquates zusammenzubasteln.
Viele Grüße