Bestimmte Cron-Skripte (stündlich, täglich, wöchentlich) wurden deaktiviert

25

Auf verschiedenen Systemen, die ich verwalte, gibt es Cron-Skripte, die über das häufig verwendete /etc/cron.{hourly,daily,weekly}Layout ausgeführt werden. Ich möchte wissen, ob es eine übliche Funktion zum Deaktivieren dieses Skripts gibt.

Wenn Sie etwas aus einem bestimmten Verzeichnis löschen, wird es natürlich deaktiviert, aber ich suche nach einer dauerhafteren Lösung. Das Löschen /etc/cron.daily/slocatewird funktionieren, um die nächtliche Deaktivierung updatedbauf meinem Heimcomputer (auf dem ich sie nie verwende slocate) zu verhindern. Wenn ich das Paket slocate das nächste Mal aktualisiere, bin ich mir ziemlich sicher, dass es wieder angezeigt wird.

Die beiden Distributionen, an denen ich am meisten interessiert bin, sind Gentoo und OpenSUSE, aber ich hoffe, dass es einen weithin implementierten Mechanismus gibt. Beide Distributionen, wie ich sie habe, verwenden Vixie-Cron (nicht sicher, ob es wichtig ist).

benizi
quelle

Antworten:

45

Sie sollten in der Lage sein chmod -x scriptname, ein Skript zu deaktivieren, aber die Datei an Ort und Stelle zu lassen.

Bis auf weiteres angehalten.
quelle
5
Dies kann durch das Paketverwaltungssystem möglicherweise rückgängig gemacht werden. Sie könnten dies robuster machen, indem Sie chattr +i scriptnamenach dem chmod.
mc0e
@ mc0e danke, dass du mich über unveränderliche Dateien unterrichtet hast, aber wie jemand sagte , sind sie beängstigend . Wenn ich jemals vergesse, was ich getan habe, kann dies zu sehr frustrierenden Problemen führen.
Jonathan Y.
2
@ JonathanY .: Das ist, wofür lsattr- um das Unheimliche zu entfernen (es listet die Attribute einer Datei auf).
Bis auf weiteres angehalten.
1
DW sicher, aber zu wissen, wie man Dateiattribute betrachtet, wenn etwas unerklärlich schief geht (genau wie in dem Thread, auf den ich verlinkt habe), ist der wahre Kick hier.
Jonathan Y.
@ JonathanY. Jetzt weißt du es. :-) Auf jeden Fall denke ich, dass das "beängstigende" Bit in diesem verknüpften Thread auf einen Pacman-Fehler verweist, nicht auf Chattr selbst
mc0e
9

run-parts führt keine Jobs aus, deren Name einen Punkt enthält

mv /etc/cron.d/job /etc/cron.d/job.disabled

werde den Trick machen.

chrisv
quelle
1
Leider hat dies das gleiche Problem beim Aktualisieren des Programms: Es wird geprüft, ob der Cron-Job vorhanden ist, und da er nicht unter seinem ursprünglichen Namen vorhanden ist, wird er neu erstellt.
Jenny D sagt Reinstate Monica
2
Das Zurückkehren beim Aktualisieren des Programms ist ein Nebeneffekt des verwendeten Pakettools, kann nicht mit einfachen Mitteln behoben werden und ist nicht die Schuld von Cron. Einige Paketsysteme speichern und speichern frühere Dateien, andere unterscheiden neue und alte Dateien und fordern Sie auf, Änderungen zu überprüfen. Unabhängig davon sollten Aktualisierungen, die zu unbeabsichtigtem Verhalten führen, an dieser Stelle einen frustrierenden, aber routinemäßigen Teil der Verwaltung von Unix-Systemen darstellen. Es gibt einfach zu viele Pakete, die sich zu schnell bewegen, um regelmäßig alle Änderungen auf ihre Auswirkungen in jeder einzelnen Umgebung zu überprüfen.
Peelman
In Debian gibt es den Begriff einer Dateiumleitung - dh Sie können die Datei effektiv umbenennen, während sie noch vom Paketmanager verwaltet wird. Möglicherweise existiert ein ähnlicher Mechanismus in Gentoo und / oder SUSE?
Bass
9

In der Regel cron.dailywird über /etc/crontabeine Zeile wie z

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

man run-parts gibt Ihnen die Optionen.

run-parts --test /etc/cron.daily Zeigt an, welche Jobs ausgeführt werden, ohne dass sie ausgeführt werden.

Ich bevorzuge es, ein Unterverzeichnis "Deaktiviert" zu erstellen und meine Jobs dorthin zu verschieben.

Wenn Sie ein Paket aktualisieren, wird der Job wahrscheinlich erneut ausgeführt oder die entfernten 'x'-Bits werden wiederhergestellt

Peter
quelle
1

Sie können slocate package entfernen, wenn Sie es nie verwenden.

Maxfer
quelle
Das war nur ein Beispiel, aber trotzdem ein guter Rat, danke. (Ich dachte, etwas könnte von slocate abhängen, aber nichts scheint zu sein.)
Benizi
Entfernen Sie slocate und installieren Sie stattdessen mlocate. Viel besser.
mc0e
1

Wenn Sie cfengine ( https://cfengine.com/ ) verwenden, können Sie dies mit disable tun. Sie schreiben einfach eine Versprechen-Datei für eine Gruppe von Hosts und diese wird beim nächsten cfagent-Lauf automatisch angewendet. Dies mit einer Marionette, einem Koch oder was auch immer zu tun, sollte auch ganz einfach sein.

Natxo Asenjo
quelle
Interessant. Ich bin nur sehr tangential auf Konfigurationsmanagement-Tools gestoßen. Ich suchte nach einer allgemeinen "Ich habe ein beliebiges Unix-ähnliches System" -Lösung.
benizi
1

Das /etc/cron.daily et. al. Skripte werden von einem Skript namens run-parts ausgeführt. Das Skript variiert. Zum Beispiel ist der oben erwähnte Schalter --test nicht auf dem Rechner, den ich gerade benutze.

Run-Parts ist ein Bash-Skript. Es ist ein allgemein nützliches Tool zum Ausführen aller Skripte in dem Verzeichnis, das als Argument angegeben ist. Es befindet sich normalerweise unter / usr / bin / run-parts.

Es hat ein Gewirr an Logik, um zu entscheiden, was ausgeführt werden soll. Dieser Code enthält die Antwort auf Ihre Frage, variiert aber auch. Sie müssen also den Code lesen, um sicher zu sein.

In der hier betrachteten Version gibt es eine Logik, die bei der Arbeit mit dem Verzeichnis <foo> nach <foo> /jobs.deny sucht. Wenn dies der Fall ist, wird die Ausführung von Skripten, die in dieser Datei erwähnt werden, allein in einer Zeile abgelehnt. Vorausgesetzt, Sie haben diese Funktionalität, ist sie fantastisch, da sie weiterhin funktioniert, wenn das zu installierende Paket installiert oder aktualisiert wird.

Ben Hyde
quelle
0

Wenn Sie sich mit RHEL und Derivaten (die das crontabsPaket bereitstellen ) befassen , können Sie einen Job explizit deaktivieren, indem Sie seinen Namen in die jobs.denyDatei einfügen.

Aus der Manpage crontabs / run-parts :

Die Ausführung von Dateien kann zugelassen oder verweigert werden, indem die Dateien jobs.allow oder jobs.deny erstellt werden, die ähnlich funktionieren wie andere Konfigurationsdateien zum Zulassen / Verweigern. Die Datei muss im angegebenen Verzeichnis erstellt werden.

Beispiel /etc/cron.daily/jobs.deny könnte zum Beispiel 0logwatch enthalten, das die Ausführung dieses Skripts verbietet.

Shodanshok
quelle
-1

Wenn Sie die Benutzer-Crontabs auch nicht wollen, deaktivieren Sie crond einfach in Ihrer Service-Liste.

In Debian und Versionen, die auf Debian basieren, müssen Sie lediglich den Symlink von der entsprechenden Datei /etc/rcX.d (für Runlevel X) entfernen.

Ich weiß nicht, wie Sie mit Diensten in SUSE oder Gentoo umgehen.

jishi
quelle
4
Das ist nur eine schlechte Idee. Durch das Deaktivieren von cron werden nützliche Wartungsaufgaben wie logrotate, updatedb, möglicherweise unbeaufsichtigte Upgrades und Standardsicherungen deaktiviert.
Tobu
Updatedb ist genau die Aufgabe, die ich zu deaktivieren versuche (aktualisiert die Datenbank für Slocate). Trotzdem ja, schlechte Ratschläge im Allgemeinen.
benizi
Oh, Entschuldigung. Ich habe Ihre Frage falsch verstanden und dachte, dass Sie ALLE systemspezifischen Cronjobs deaktivieren möchten, nicht einen einzigen.
Jishi