Comment empêcher les tâches cron d'être exécutées à certains moments dans Debian? (un «mode de jeu» / «performance»)

12

On dirait que j'ai logcheck mis en place comme une tâche cron et chaque fois qu'il est procédé course greppar logcheckoccupe environ un quart de mon CPU.

Maintenant, j'ai certains moments pendant lesquels j'ai besoin de ma pleine capacité CPU et que mon système utilise le moins de ressources possible, sauf pour des processus / spécifiques (que je pourrais peut-être spécifier d'une manière ou d'une autre).

Est-il possible de placer ma Debian 9.1 avec une machine KDE dans une sorte de mode de performance (ou `` mode de jeu '') qui empêche les processus non explicitement démarrés par l'utilisateur de prendre beaucoup de ressources système, diminue la charge des processus d'arrière-plan et surtout : retarde les tâches cron jusqu'à ce que ce mode soit à nouveau arrêté?

mYnDstrEAm
la source
6
Une solution simple serait de ne pas exécuter logcheck dans le travail cron, mais d'écrire un script personnalisé et de l'exécuter dans le travail cron. Dans le script, effectuez d'abord les vérifications dont vous avez besoin, puis exécutez logcheck à la fin du script si ces vérifications réussissent.
SauceCode
5
Vérifiez la priorité. S'il a été réduit à 19, il ne fonctionne que lorsque le processeur n'a rien d'autre à faire.
Thorbjørn Ravn Andersen

Réponses:

18

Si «certains moments» ne sont pas fixes, c'est- à- dire que vous souhaitez spécifier manuellement quand votre système entre et quitte le «mode performance», vous pouvez simplement arrêter et démarrer cron:

sudo systemctl stop cron

empêchera l'exécution de toutes les tâches cron, et

sudo systemctl start cron

les réactivera.

Vous pouvez également vérifier au anacronlieu de cron, il pourrait être plus facile de modifier globalement d'une manière qui conviendrait à vos utilisations.

Stephen Kitt
la source
12

Je considérerais deux approches

  1. Laissez la planification intacte mais exécutez tous les crontravaux sous nice, et peut-être même ionice:

    0 * * * *    root    ionice -c3 nice /some/command and parameters
    
  2. Interdisez tout crontravail pendant certaines périodes. N'oubliez pas que tout utilisateur qui peut créer (ou supprimer) le fichier indicateur peut contrôler cette approche. Cela pourrait fonctionner si vous souhaitez avoir un mode de jeu configuré à la demande , en ajoutant les commandes touchet rmau script de démarrage de votre jeu. (Vous devrez peut-être utiliser /tmpplutôt que /var/run, mais cela est trivialement ouvert à tout utilisateur.)

    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...
    

Une fois configurée, aucune des deux approches ne nécessite un accès root. De plus, vous pouvez décider à l'avance quels emplois doivent être soumis à ce contrôle et lesquels ne doivent pas l'être.

roaima
la source
1
Correct. Pourquoi goulot d'étranglement d'un processus quand il y a beaucoup de CPU disponible? Les priorités du système d'exploitation entrent en jeu en cas de pénurie, et non arbitrairement.
MSalters
Je ne pense pas que la -c3 -n7combinaison soit logique, du moins sous Linux. La classe de planification inactive n'a aucune priorité.
gardenhead
@gardenhead oups vous avez raison. Je m'utilise -c2 -n7moi-même mais quand j'ai laissé tomber la classe au ralenti pour cette réponse, j'ai omis de supprimer la priorité.
roaima