Wie kann man verhindern, dass Cron-Jobs zu bestimmten Zeiten in Debian ausgeführt werden? (ein "Gaming" / "Performance-Modus")

12

Es sieht aus wie ich logcheck oben als cron - Job eingestellt haben und wann immer es laufen Prozess ist grepdurch logcheckaufgreift um ¼ meiner CPU.

Jetzt habe ich bestimmte Zeiten, in denen ich meine volle CPU-Kapazität benötige und mein System so wenig Ressourcen wie möglich beanspruchen muss, außer für bestimmte Prozesse (die ich vielleicht irgendwie spezifizieren könnte).

Ist es möglich, mein Debian 9.1-System mit KDE in einen Performance-Modus (oder 'Gaming-Modus') zu versetzen, der verhindert, dass nicht explizit vom Benutzer gestartete Prozesse viel Systemressourcen in Anspruch nehmen, die Belastung von Hintergrundprozessen verringert und vor allem : verzögert Cronjobs, bis dieser Modus wieder gestoppt wird?

mYnDstrEAm
quelle
6
Eine einfache Lösung wäre, nicht logcheck im Cron-Job auszuführen, sondern ein benutzerdefiniertes Skript zu schreiben und dieses im Cron-Job auszuführen. Führen Sie im Skript zunächst alle erforderlichen Überprüfungen durch und führen Sie am Ende des Skripts die Protokollprüfung aus, wenn alle Überprüfungen erfolgreich waren.
SauceCode
5
Überprüfen Sie die Priorität. Wenn es auf 19 reduziert wurde, läuft es nur, wenn die CPU nichts anderes zu tun hat.
Thorbjørn Ravn Andersen

Antworten:

18

Wenn „bestimmte Zeiten“ nicht festgelegt sind, dh Sie manuell festlegen möchten, wann Ihr System in den „Leistungsmodus“ wechselt und diesen verlässt, können Sie einfach anhalten und starten cron:

sudo systemctl stop cron

verhindert, dass Cron-Jobs ausgeführt werden, und

sudo systemctl start cron

wird sie wieder aktivieren.

Sie können anacronstattdessen auch eine Überprüfung durchführen. cronMöglicherweise ist es einfacher, globale Anpassungen vorzunehmen, die Ihren Verwendungszwecken entsprechen.

Stephen Kitt
quelle
12

Ich würde zwei Ansätze in Betracht ziehen

  1. Lassen Sie die Zeitplanung unverändert, aber führen Sie alle cronJobs unter niceund möglicherweise sogar unter ionice:

    0 * * * *    root    ionice -c3 nice /some/command and parameters
    
  2. Zu cronbestimmten Zeiten keine Jobs zulassen . Denken Sie daran, dass jeder Benutzer, der die Flag-Datei erstellen (oder entfernen) kann, diesen Ansatz steuern kann. Dies funktioniert möglicherweise, wenn Sie einen Spielemodus benötigen, der bei Bedarf eingerichtet wird , indem Sie die Befehle touchund zum rmStartskript Ihres Spiels hinzufügen . (Möglicherweise müssen Sie verwenden, /tmpanstatt /var/run, aber dann ist es für jeden Benutzer trivial offen.)

    0 18 * * *      root    touch /var/run/no_cron
    0 19 * * *      root    rm -f /var/run/no_cron
    
    0 * * * *       root    test ! -f /var/run/no_cron && /some/command...
    

Einmal eingerichtet, erfordert keiner der beiden Ansätze Root-Zugriff. Außerdem können Sie im Voraus entscheiden, welche Jobs dieser Kontrolle unterliegen sollen und welche nicht.

Roaima
quelle
1
Richtig. Warum einen Prozess zu einem Engpass machen, wenn genügend CPU zur Verfügung steht? OS-Prioritäten setzen ein, wenn es knapp wird, nicht willkürlich.
MSalters
Ich glaube nicht, dass die -c3 -n7Kombination sinnvoll ist, zumindest unter Linux. Die Leerlaufzeitplanungsklasse hat keine Prioritäten.
Gardenhead
@gardenhead Ups, du hast Recht. Ich benutze -c2 -n7mich selbst, aber als ich die Klasse fallen ließ, um für diese Antwort im Leerlauf zu sein, ließ ich es aus, die Priorität zu entfernen.
Roaima