Frage Das spezifische Skript cron. {Stündlich, täglich, wöchentlich} wird stark deaktiviert


Auf verschiedenen Systemen, die ich administriere, gibt es Cron-Skripte, die über das üblicherweise verwendete System laufen /etc/cron.{hourly,daily,weekly} Layout. Was ich wissen möchte, ist, ob es eine übliche Funktion zum Deaktivieren dieses Skripts gibt.

Offensichtlich wird das Löschen von etwas aus einem bestimmten Verzeichnis es deaktivieren, aber ich suche nach einer dauerhafteren Lösung. Löschen /etc/cron.daily/slocate wird funktionieren, um die Nacht zu deaktivieren updatedb auf meiner Heimmaschine (wo ich nie benutze slocate), aber das nächste Mal, wenn ich das Slocate-Paket aktualisiere, bin ich ziemlich sicher, dass es wieder erscheinen wird.

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


24
2018-06-11 08:02


Ursprung




Antworten:


Du solltest dazu fähig sein chmod -x scriptname Deaktivieren Sie ein Skript, aber lassen Sie die Datei an ihrem Platz.


42
2018-06-11 11:02



Beeindruckend. So einfach tut es weh. Vielen Dank. - benizi
Das könnte oder könnte nicht durch das Paketverwaltungssystem rückgängig gemacht werden. Du könntest dies dadurch robuster machen chattr +i scriptname nach dem chmod. - mc0e
@ mc0e danke das du mir unveränderbare Dateien beigebracht hast, aber wie jemand sagte, Sie sind unheimlich. Wenn ich jemals vergessen würde, was ich getan habe, könnte das zu sehr frustrierenden Problemen führen. - Jonathan Y.
@ JonathanY .: Das ist was lsattr ist für - um das zu entfernen unheimlich (es listet die Attribute einer Datei auf). - Dennis Williamson
DW sicher, aber wissen, um Dateiattribute zu betrachten, wenn etwas unerklärlicherweise falsch geht (genau wie in dem Thread, mit dem ich verlinkt bin) ist der wahre Kick hier. - Jonathan Y.


run-parts führt keine Jobs aus, die einen Punkt in ihrem Namen haben

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

wird den Trick machen.


8
2018-05-15 13:21



Leider wird dies das gleiche Problem beim Upgraden des Programms haben - es wird überprüft, ob der Cron-Job existiert, und da er nicht durch seinen ursprünglichen Namen existiert, wird er neu erstellt. - Jenny D
Das Zurückkommen beim Upgraden des Programms ist ein Nebeneffekt des verwendeten Paket-Tools, kann nicht mit einfachen Mitteln behoben werden und ist nicht die Schuld von Cron. Bei einigen Paketsystemen werden vorherige Dateien nuke und gepflastert, bei anderen die neuen und alten Versionen, und Sie werden gefragt, ob Änderungen an der Überprüfung vorgenommen werden sollen. Unabhängig davon sollten Updates, die unbeabsichtigtes Verhalten erzeugen, zu diesem Zeitpunkt ein frustrierender, aber routinemäßiger Teil der Unix-Systemverwaltung sein. Es gibt einfach zu viele Pakete, die sich zu schnell bewegen, um alle Änderungen regelmäßig auf ihre Auswirkungen in jeder einzelnen Umgebung zu überprüfen. - peelman
In Debian gibt es eine Vorstellung von a Dateiumleitung - ich. e. Sie können die Datei effektiv umbenennen, während sie noch vom Paketmanager verwaltet wird. Vielleicht existiert ein ähnlicher Mechanismus in Gentoo und / oder SUSE? - Bass


Meistens cron.daily wird über aufgerufen /etc/crontab durch eine Linie wie z.B.

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

man run-parts  gibt Ihnen die Möglichkeiten.

run-parts --test /etc/cron.daily zeigt an, welche Jobs ausgeführt werden, ohne sie auszuführen.

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

In jedem Fall, wenn Sie ein Paket aktualisieren, ist es wahrscheinlich, dass der Job wieder eingesetzt wird oder dass entfernte x-Bits wiederhergestellt werden


7
2017-12-08 21:53





Sie können Slocate-Paket entfernen, wenn Sie es nie verwenden.


1
2018-06-11 08:23



Das war nur ein Beispiel, aber immer noch ein guter Rat, danke. (Ich dachte, etwas könnte von der Flucht abhängen, aber nichts scheint es zu sein.) - benizi
Entfernen Sie slocate und installieren Sie stattdessen mlocate. Viel besser. - mc0e


Wenn Sie cfengine (https://cfengine.com/) Sie könnten dies mit deaktivieren. Sie schreiben nur eine Versprechungsdatei für eine Gruppe von Hosts und sie wird sich beim nächsten cfagent-Lauf selbst anwenden. Dies mit einer Puppe oder einem Koch oder was auch immer zu tun, sollte auch ziemlich einfach sein.


1
2018-06-11 14:18



Interessant. Ich habe die Konfigurationsmanagement-Tools nur sehr tangential erlebt. Ich suchte nach einer allgemeinen "ich habe irgendein willkürliches Unix-ähnliches System" Lösung. - benizi


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

Run-Parts ist ein Bash-Skript. Es ist ein allgemein nützliches Werkzeug zum Ausführen aller Skripte in dem Verzeichnis, das es als Argument erhält. Es findet sich normalerweise unter / usr / bin / run-parts.

Es hat ein Gewirr von Logik für die Entscheidung, was zu laufen ist. 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 Version, die ich mir anschaue, hat es eine Logik, die bei der Arbeit am Verzeichnis nach /jobs.deny sucht. Wenn dies der Fall ist, lehnt es die Ausführung eines Skripts ab, das in dieser Datei in einer Zeile erwähnt wird. Angenommen, Sie haben diese Funktionalität, ist es großartig, weil es weiter funktioniert, wenn das installierte Paket installiert oder aktualisiert wird.


0
2018-01-29 18:11





Im Umgang mit RHEL und Derivaten (die die crontabs package) können Sie einen Job explizit deaktivieren, indem Sie seinen Namen in jobs.deny Datei.

Von Crontabs / Run-Parts man Seite:

Die Ausführung von Dateien kann durch Erstellen einer Datei erlaubt oder verweigert werden   jobs.allow oder jobs.deny funktioniert ähnlich wie andere erlauben / verweigern   Konfigurationsdateien. Die Datei muss im angegebenen Verzeichnis erstellt werden.

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


0
2017-10-12 12:22





Wenn Sie die user-crontabs auch nicht haben wollen, deaktivieren Sie einfach crond in Ihrer Service-Liste.

In Debian und Versionen, die auf Debian basieren, ist es einfach, den Symlink aus dem entsprechenden /etc/rcX.d (für Runlevel X) zu entfernen.

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


-1
2018-06-11 08:05



Das ist nur eine schlechte Idee. Durch die vollständige Deaktivierung von cron werden nützliche Wartungsaufgaben wie logrotate, updatedb, möglicherweise unbeaufsichtigte Upgrades und Standard-Backups deaktiviert. - Tobu
Updatedb ist genau die Aufgabe, die ich versuche zu deaktivieren (aktualisiert die Datenbank für Slocate). Trotzdem, ja, schlechter Rat im Allgemeinen. - benizi
Oh, Entschuldigung. Ich habe Ihre Frage falsch gelesen und dachte, dass Sie ALLE systemspezifischen Cronjobs deaktivieren möchten, nicht einen einzigen. - jishi