Cron-Job unter CentOS 6.5

Cron-Job unter CentOS 6.5

Ich habe diese beiden Referenzen verwendet, um einen neuen Crontab-Eintrag einzufügen.

roter Hut

Ubuntu

Ich habe eine neue Bash-Datei erstellt und sie nach /usr/bin verschoben. Diese SH-Datei hat Ausführungsberechtigungen für den Root-Benutzer und die Administratorgruppe. Die Bash-Datei gibt lediglich eine Zeile in eine Protokolldatei aus und ruft dann ein Java-Programm auf. Ich habe die SH-Datei manuell als Root getestet. Sie läuft einwandfrei. Mein Crontab-Eintrag sieht so aus ...

 @hourly      /usr/bin/foo.blah.sh

Es soll zu jeder vollen Stunde ausgeführt werden. Die Echo-Anweisung wird nicht in die Protokolldatei gedruckt, daher glaube ich nicht, dass Crond es überhaupt aufruft. Wenn ich Prozesse in „top“ visuell überwache, wird der Job außerdem nie angezeigt. Ich habe „service crond status“ ausgeführt, um zu überprüfen, ob der Cron-Daemon ausgeführt wird. In der Dokumentation steht, dass ein Neustart des Daemons nicht erforderlich ist. Was könnte ich sonst noch falsch machen?

Antwort1

Sie sagen zwar nicht, wo sich der Crontab-Eintrag befindet, aber basierend auf Ihrem Kommentar, der crontab -lFolgendes ausgibt no crontab for root, würde ich vermuten, dass Sie eine Datei in einem der Verzeichnisse /etc/cron.* hinzugefügt haben, die Dateien enthält, die verschiedenen Cron-Jobs entsprechen. Diese Antwort setzt voraus, dass dies der Fall ist.

Diese Dateien haben ein Format, das sich leicht von der benutzerspezifischen Crontab unterscheidet, über die Sie sie bearbeiten crontab -e. InsbesondereSie enthalten ein Benutzernamensfelddirekt vor dem Befehl, der nicht in der benutzerspezifischen Crontab enthalten ist (die zumindest auf meinem System unter /var/spool/cron/crontabs gespeichert ist, aber missbrauchen Sie diese Information bitte nicht; der genaue Speicherort ist ein Implementierungsdetail des Cron-Daemons, den Sie gerade ausführen, und Sie sollten die dokumentierten Schnittstellen zur Verwaltung dieser Dateien verwenden).

Infolge,du solltest dich ändern

@hourly      /usr/bin/foo.blah.sh

Zu

@hourly user /usr/bin/foo.blah.sh

wobei userder Name des Benutzerkontos ist, unter dem das Skript ausgeführt werden soll. Es sollte dann einwandfrei laufen.

Ich rate Ihnen dringend, Cron-Jobs nur auszuführen, rootwenn Sie unbedingt müssen. Alles, was Sie als Superuser tun, ist immer ein Sicherheitsrisiko. Wenn möglich, geben Sie dem Skript ein eigenes Konto mit eingeschränktem Zugriff. (Dies ist das Prinzip der geringsten Privilegien; das heißt, das Mindeste, was erforderlich ist, damit es seine Aufgabe erfüllen kann.) Als allgemeine Regel sollten Sie Folgendes platzieren:systemlokale Dateien in /usr/localum Konflikte mit dem Paketmanager des Systems zu vermeiden; außerdem sollten Sie, um Verwirrung zu vermeiden, keine Dinge in Bin-Verzeichnisse legen, für deren Funktion Root-Berechtigungen erforderlich sind, sondern stattdessen sbin verwenden.

Antwort2

Wenn ich in der Vergangenheit Skripte zu cron hinzugefügt habe, habe ich die Zeile immer mit sh eingeleitet, etwa so:

@hourly    sh /usr/bin/foo.blah.sh

verwandte Informationen