crontab -e richtig eingerichtet?

  • Hey,


    ich möchte euch gerne mal fragen, ob ich es jetzt richtig verstanden habe mit den Crontabs.


    1. Jeder Benutzer hat eigene Crontabs und zwar hier:

    Code
    /var/spool/cron/crontabs


    2. wenn ich als root eingeloggt bin und

    Code
    crontab -e

    eintrage erstellt er eine leere Datei mit auskommentierter Erklärung.


    3. Wenn ich den apache2 z.B. jede Nacht 0 Uhr neustarten lassen möchte, muss ich das in die Datei

    Code
    /var/spool/cron/crontabs/>root

    (

    Code
    crontab -e

    ) schreiben:

    Code
    *  *   *   *   *    /etc/init.d/apache2 restart


    Da der erste Wert ja für Minuten steht und der zweite für die Stunden, wäre als "Übung" folgendes Möglich.


    Fragesatz:
    Erstelle einen crontab der jeden Tag 16:20 Uhr einen Befehl ausführt.


    Lösung:

    Code
    20  16   *   *   *    /etc/init.d/apache2 restart


    Weiteres Beispiel:
    Fragesatz:
    Erstelle ienen Cronjob, der jeden Monat einen Befehl ausführt.


    Lösung:

    Code
    *  *   1  1-12   *    /etc/init.d/apache2 restart



    Weitere Idee, die ich habe:
    Ich möchte gerne immer Nachts/Morgens 4 Uhr eine Sicherung der DB machen. Diese Sicherung soll dann in ein bestimmtes Verzeichnis geschoben werden.
    Also wäre der crontab:

    Code
    0 4 * * * root /home/cronjob-scripte/meinescripte.sh


    Wobei der Ordner "cronjob-scripte" die Rechte 0555(r-xr-xr-x) hat.


    Innerhalb des Scriptes erstelle ich dann den Code bzw. würde den hier nehmen:


    Quelle: https://github.com/webstylr/si…lob/master/mysqlbackup.sh


    Danach natürlich noch der neustart:

    Code
    /etc/init.d/cron reload


    Meine Lektüre war das:
    https://debian-handbook.info/b…-scheduling-cron-atd.html


    Danke :)

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Fragesatz:
    Erstelle ienen Cronjob, der jeden Monat einen Befehl ausführt.


    Lösung:

    Quellcode


    * * 1 1-12 * /etc/init.d/apache2 restart

    Das hier solltest du dir nochmal näher angucken. Er führt am 1. eines beliebigen Monats (statt 1-12 hättest du hier * schreiben können) JEDE Stunde und JEDE Minute deinen Befehl aus. Ich glaube hier wolltest du etwas anderes tun ;)


    Alternativ gibt es meistens noch Cron.hourly, daily und monthly, wenn dir der genaue Termin nicht so wichtig ist.

  • Hallo,


    ja diese Sachen:
    Cron.hourly, daily und monthly


    habe ich nicht ganz verstanden. Ich weiß, dass der crontab das erkennt, wüsste jetzt aber nicht, wie ich es einbinde, dass es funktioniert und habe mich mit absicht erstmal nicht an Google gewand sondern wollte alles anhand des Artikels raus finden.


    Stimmt 1-12 = * ...macht sinn :D ^^


    Also wäre es ja dann so richtig:
    0 1 1 * * /etc/init.d/apache2 restart


    ...das sieht glaube so richtiger aus :D

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Der /etc/cron.d Ordner kann einfach mit einem Crontab befüllt werden. Einfach eine neue Datei anlegen und den Inhalt hineinschreiben. Nicht vergessen, dass dort vor dem eigentlichen Befehl der Benutzername angegeben sein muss! Und eine Leerzeile am Ende der Datei stehen muss. Der Cron-Daemon erkennt Änderungen an diesen Dateien von selbst und liest sie danach neu ein.


    Die Init-Scripte verwendet man heute übrigens nicht mehr direkt. Je nach System ist service apache2 restart oder systemctl restart apache2 zu empfehlen. Das wäre die aktuelle Methode für Debian/Ubuntu.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Danke Christian,


    ich verstehe das so, dass ich eine x beliebige Datei im Ordner /cron/ anlegen kann und dann der Code eben so aussieht:


    lalalalalalala:

    Code
    root 0 1 1 * * /etc/init.d/apache2 restart
    User2 0 1 1 * * service apache2 restart
    User3 0 1 1 * * systemctl restart apache2


    Zitat von killerbees19

    Die Init-Scripte verwendet man heute übrigens nicht mehr direkt.


    Fand bei denen immer schön, dass man ein feedback bekommen hat. Aber sicher kann ich auch ohne init leben, macht es auch leichter...


    Zitat von killerbees19

    Nicht vergessen, dass dort vor dem eigentlichen Befehl der Benutzername angegeben sein muss! Und eine Leerzeile am Ende stehen muss.


    Also am ende muss immer eine Leerzeile sein, nach jedem cronjob?

    Code
    root 0 1 1 * * /etc/init.d/apache2 restart[LEERZEILE]
    User2 0 1 1 * * service apache2 restart[LEERZEILE]
    User3 0 1 1 * * systemctl restart apache2[LEERZEILE]


    Dann könnte im Ordner(cron/ also auch eine sh file sein ja?

    Der oben geschriebene Beitrag ist meine persönliche Meinung/Interpretation!
    Im übrigen verweise ich auf §675 Abs. 2 BGB .

  • Am Ende der Datei meinte ich. Bei den meisten Unix/Linux Editoren eh quasi Standard, aber unter Windows nicht, falls Du sie über SFTP o.ä. bearbeitest.


    Der Username gehört nicht am Anfang der Zeile, sondern vor den eigentlichen Befehl, also nach der Zeitdefinition.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Sorry, ich bin heute auch schon etwas verwirrt… :rolleyes:


    Meine vorherigen Hinweise beziehen sich alle auf den /etc/cron.d Ordner!
    Die anderen daily/hourly/monthly Ordner enthalten Programme/Scripts/Symlinks.


    Das ist alles z.B. im Ubuntuusers-Wiki ganz gut erklärt. Wikipedia ist in diesem Fall auch hilfreich.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)