cron.daily-Jobs laufen nicht


19

Ich habe 3 tägliche Cron-Jobs erstellt, die ausgeführt werden sollen.

Unten sind die drei, die in etc / cron.daily abgelegt sind

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' me@email.com

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" me@email.com

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' me@email.com

Ich habe natürlich me@email.com durch meine E-Mail ersetzt.

Wenn ich diesen Cronjob manuell starte, funktioniert er einwandfrei ./nameoffile.sh

Aber es läuft nicht täglich, was kann die Ursache sein oder wie kann ich das überprüfen?


2
Stellen Sie sicher , dass die von Ihnen erstellten Dateien in cron.daily / wöchentlich / stündlich / etc ausführbar sind nur tun chmod + x /etc/cron.daily/whatever
Turgut Kalfaoglu

Antworten:


6

Es gibt zwei mögliche Verdächtige, die normalerweise dazu führen, dass cronJobs nicht ausgeführt werden können.

Das erste Problem sind Berechtigungsprobleme, dh ein Benutzer kann das Skript / den Befehl ausführen, der Cron-Daemon jedoch nicht, da sich der Job in den Cron-Jobs des falschen Benutzers befindet. Beispielsweise erstellt der Benutzer ein Skript oder führt einen Befehl mit erhöhten Rechten aus, dh er verwendet sudo, und fügt dann das getestete Skript / den getesteten Befehl zu seiner Liste der Cron-Jobs hinzu ( crontab). Das Ergebnis ist, dass der Cron-Job des Benutzers nicht ausgeführt werden kann, da er erhöhte Berechtigungen benötigt.

  • Einen Cron-Job in den Crontab-Typ des aktuellen Benutzers einfügen crontab -e
  • Einen Cron-Job in den crontab-Typ von root einfügen sudo crontab -e

Der zweite Grund sind die Pfade. Um sicherzustellen, dass das Skript ausgeführt wird, muss der Benutzer dem Skript, das in crontab ausgeführt werden soll, den vollständigen Pfad hinzufügen. Eine andere Lösung wäre, die PATH-Variable des Root-Benutzers zu erweitern, indem Sie die folgende Zeile oben in die crontab-Datei einfügen:

PATH=/usr/sbin:/usr/bin:/sbin:/bin

wie das Community-Wiki erwähnt .

Vielleicht möchten Sie das Community-Wiki über Cron lesen, das weitere Details zu den oben genannten Themen enthält.


Also füge ich einfach den Dateinamen ein?
Sonicboom

Eigentlich heißt es, dass es keinen vorherigen Cron-Job für root gibt und Sie zuerst Ihren schreiben werden. Dann werden Sie aufgefordert, einen Editor auszuwählen, um die Crontab zu ändern. Wählen Sie einfach eine aus dem Menü (1.bin / ed, etc). Pick Nano ist einfach, beachten Sie einfach die Anweisungen.
Stef K

Wenn ich also einmal am Tag um 22 Uhr laufen würde, würde ich * 22 * ​​* * test> rkhunter.sh setzen oder?
Sonicboom

ah geil! Ich versuche es jetzt!
Sonicboom

Wofür ist der Test> rkhunter.sh?
Sonicboom

75

Nach dieser Antwort liegt das Problem bei der Erweiterung .sh. Entfernen Sie das (also benennen Sie zum Beispiel Ihre Datei von rkhunter.sh in rkhunter um).

Führen Sie zur Bestätigung den folgenden Befehl aus run-parts --test /etc/cron.daily

Wenn Ihr Skript (rkhunter) in den Ergebnissen enthalten ist, ist alles in Ordnung. Weitere Informationen zum Befehl run-parts finden Sie in den Manpagesman run-parts


1
Dies ist die Antwort, nach der ich gesucht habe. Nach verschiedenen Tests wurde mir klar, dass eine weitere Skriptdatei ohne sh-Erweiterung ausgeführt wird
Albert Català,

5
wie @ Rharriso in seiner Antwort sagte. Es ist weniger ein Problem mit ".sh" als mit ".". Jede Datei mit einer beliebigen Erweiterung wird übersehen. direkt aus man run-parts"Namen müssen vollständig aus ASCII-Groß- und Kleinbuchstaben, ASCII-Ziffern, ASCII-Unterstrichen und ASCII-Minus-Bindestrichen bestehen" zu
zitieren

10

Ich denke, dass Dateien mit Erweiterungen ignoriert werden.

Lauf:

 run-parts --test /etc/cron.daily

Wenn Ihre Skripte nicht aufgelistet sind, entfernen Sie die .sh-Erweiterungen und versuchen Sie es erneut.


10

In meinem System war es, weil Anacron nicht installiert war.

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Installieren Sie also entweder anacron oder entfernen Sie test -x / usr / sbin / anacron


1
+1 Ist anacron nicht standardmäßig installiert? Ich hätte das erwartet. Ich denke, das würde es für mich lösen. Vielen Dank.
Lepre

Sicher genug, es war nicht auf meinem .. FFS, ich bin sicher, es war, als das Skript vor ein paar Monaten ausgeführt wurde !: dpkg --get-selections | grep cron.. <schwört>
Grizly

Ja, ich weiß auch nicht, was passiert ist, da es sich um ein Paket handelt, das normalerweise beim Start installiert wird.
Natim

9
Das ist nicht wirklich richtig. anacronist nicht notwendig; Der ||Operator in den crontab-Befehlen wird ausgeführt, run-partswenn anacron NICHT installiert ist. Bei der anacronInstallation werden diese täglichen / wöchentlichen / monatlichen run-partsBefehle überflüssig.
TalkLittle

Vielleicht lag es daran, dass Run-Parts nicht funktionierten? In jedem Fall hat die Installation von anacron das Problem für mich behoben.
Natim

5

Um Stef zu antworten, sollten Sie auch sicherstellen, dass sie das ausführbare Bit haben:

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

Sie sollten sie mit ausführen können chmod +x filename.


4

Benennen Sie Ihre Datei so um, dass sie nicht die Erweiterung .sh hat

Versuchen Sie, dies zu überprüfen

sudo run-parts --list /etc/cron.daily 

Sie werden sehen, dass es nicht aufgeführt ist. Also laufe:

mv script.sh script

und versuchen Sie es erneut. Es sollte aufgelistet sein.


Dieses Problem scheint sich auf alle ausführbaren Dateien mit einer Erweiterung auszuwirken. Ich hatte einen Dateinamen "filename.ca" und es würde ihn auch nicht
auflisten,

0

Ich konnte es nicht mit Anacron zum Laufen bringen, ich habe Anacron entfernt /etc/crontabund ausgeführt apt remove --purge anacronund es funktioniert sofort.

Ich verstehe nicht, warum wir zwei Scheduler brauchen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.