cron job per sh script

Cool Master

Fleet Admiral
Registriert
Dez. 2005
Beiträge
38.761
Guten Morgen,

ich habe ein kleines Installations script für ein Backupscript geschrieben.

Es sieht aktuell so aus:

Code:
#!/bin/bash

echo "Vielen Dank für ihr vertrauen in das Script :) Sie müssen root Rechte haben um die Installation auszuführen"
echo "Die Installation beginnt in 10 Sekunden"
sleep 10

cp datum.cgi doku.cgi faq.cgi index.cgi inhalt.cgi suchen.cgi /usr/lib/cgi-bin
cp logo.png style.css /var/www/

mkdir /root/Backups
mkdir /home/scripte
cp backup_hourly.sh /home/scripte

/etc/init.d/apache2 restart

echo "Installations fertig"
So das ganze möchte ich nun noch ein wenig erweitern. Ich möchte einen eintrag in die cronjob schreiben die besagt führe backup_hourly.sh was unter /home/scripte/backup_hourly.sh liegt jede Stunde aus und jeden 1. Tag des neuen Monats.

Wie gehe ich da nun vor?
 
1. > crontab -e
2. Zeile hinzufügen:
0 * 1 * * /home/scripte/backup_hourly.sh #Jeden 1. Tag im Monat jede Stunde rennen lassen
3. Je nach Editor entsprechend speichern, fertig.
 
und um jede stunde auszuführen so glaub ich:

* */1 * * * /home/scripte/backup_hourly.sh


bei der antwort von aprilliaracer bin ich mir nicht sicher ob das so geht ich hätte wohl eher

0 0 1 0 * /home/scripte/backup_hourly.sh

geschrieben. aber so tief steck ich da nicht drin.
entweder probieren oder auf andere warten^^

edit: die 1 fehlte noch, so müsste es jeden 1. im monat um 00:00 Uhr sein.
 
Zuletzt bearbeitet:
Oh, würde fast sagen die Kombination aus beidem wäre gut...
* */1 * * * würde garantiert nicht funktionieren, da verwette ich meinen po drauf.
0 */1 * * * wäre stündlich
0 */1 1 * * wäre am 1. Tag des Monats stündlich.
 
Hmm schon mal danke aber ich würde das gerne automatisch eintragen lassen das geht doch bestimmt oder? Ist zwar nur ein kleines Projekt das ich mache aber wäre nett wenn ich da nichts schreiben muss einfach install.sh ausführen und die sache wird voll installiert.
 
Ok^^

versteh auch nicht genau wie er es jetzt will:

- jeden tag stündlich ( da wäre dann der 1. des monats ja mit inbegriffen )
- nur am 1. des monats jede stunde

wäre vllt noch klärungsbedürftig.
 
Ok^^ Also jeden tag Stündlich (wie die Time Mashine beim Mac)

Am 1. des Monats wird ein Voll Backup erstellt mit einem anderen Script nennt sich backup_monthly.sh an sich genau das gleiche bekommt nur nen anderen Name und Ornder Struktur.
 
Cool Master schrieb:
Hmm schon mal danke aber ich würde das gerne automatisch eintragen lassen das geht doch bestimmt oder?
Ja. Schreib alle cron-Einträge in ein File, meinetwegen "backupcrons". Dein Installationskript macht dann:

crontab < /pfad/zu/backupcrons

bzw. wenn das Installskript als root läuft und die crontab für Nutzer xxxx angelegt werden soll, mußnoch der Nutzername angegeben werden, dessen crontab geändert werden soll:

crontab -u xxxx < /pfad/zu/backupcrons

Dabei gehe ich davon aus, dass die crontab vorher leer war. Alte Einträge würden verloren gehen.

In das File backupcrons kommt sowas:
Code:
#m h dom mon dow command
10 * *   *   *   /home/scripte/backup_hourly.sh
40 0 1   *   *   /home/scripte/backup_monthly.sh

(10 Minuten nach jeder vollen Stunde backup_hourly.sh ausführen. An jedem 1. Tag eines Monats um 0:40 Uhr backup_monthly.sh ausführen.)


Bischen Fehlerbehandlung würden deinen Skripten gut tun. Wenn man Verzeichnisse erstellt, Dateien rumkopiert und crontabs ändert, sollte man jeweils checken, ob das erfolgreich war und im Fehlerfall angemessen reagieren.
 
Zuletzt bearbeitet:
Soweit ich weiß (bitte verbessern wenn falsch) gibt es verschiedene Implementierungen von crontab. Da ein einheitliches Script hinzubiegen um einen Eintrag zu erstellen dürfte schwierig werden. An und für sich sollte auf deinem System irgendwo eine Datei liegen, die die Tabelle enthält, nur leider ist es zum Beispiel nicht immer gegeben, dass die Datei nach dem Start deines Systems nochmal geladen wird. Nur über crontab -e wird ein Update dafür getriggert. Die Änderungen würde also mit etwas Glück zum Neustart übernommen oder sogar komplett verworfen. Am besten du befragst mal die manpages zu deiner Implementierung.
 
Klassische crontab-Einträge versteht jeder. Auf zusätzliche Erweiterungen ist er nicht abgewiesen.

Martin240 schrieb:
Nur über crontab -e wird ein Update dafür getriggert.
Nein. Das -e steht lediglich für "editieren" um interaktiv eine ggf. vorhandene Tabelle zu ändern, für mehr nicht. ISt die neue crointab istalliert (check via "crontab -l"), wird sie auch verwendet. Fürs updaten ist es also egal, ob man "crontab -e" oder "contab file" oder "crontab < file" verwendet. Der cron-deamon, falls er überhaupt Eintrage zwischenspeichert, checkt bei jedem run (normalerweise jede Minute) auf Änderungen. (via Änderungsdatum des Verzeichnisses mit den crontabs drin z.B.)
 
Zuletzt bearbeitet:
@mensch183

Wie genau soll das Script aussehen? Wie im Anhang?

Wenn ich das install script ausfühe bekomme ich immer:

"new crontab file is missing newline before EOF, can't install"
 
Zuletzt bearbeitet:
Cool Master schrieb:
"new crontab file is missing newline before EOF, can't install"
Eine eindeutige Meldung. Das Programm crontab checkt den Inhalt der neuen Tabelle (also den Inhalt von backupcrons), bevor die neue Tabelle installiert wird. Deine Tabelle gefällt ihm nicht. EOF steht für 'end of file'.

Also nach deiner letzten Zeile in der "backupcrons" noch einen Zeilenumbruch einfügen, d.h. hinter dem allein auf der Zeile stehenden '#'. Oder das '#' wegnehmen, damit das newline hinter der eigentlich wichtigen Zeile das letzte Zeichen des Files ist. Hauptsache das File endet mit einem newline=Zeilenumbruch='ENTER drücken' im Texteditor.
 
Zuletzt bearbeitet:
Hmmm

ich hatte zwar Enter gedrückt aber wolte er nicht annehmen. Habe das ganze noch mal in eine neue Datei geschrieben und es geht nun...

Dank dir :)
 
Zurück
Oben