Forum Linux.debian/ubuntu Tâche Cron - sysctl: command not found

Posté par . Licence CC by-sa.
Tags : aucun
0
31
mar.
2020

Bonjour,

J'ai créé un petit script d'une ligne contenant un mod de purge de la Ram à intervalle régulier car j’observai que cette dernière était utilisée à 98 % très souvent pour rien. L’exécution de cette ligne faisait retomber l’utilisation de la mémoire de 98% à 15% puis cela remontait en environ 5 jours sans que l'ordinateur ne soit utilisé. A noter qu'il s'agit d'un VM Promox sous Linux pve 4.15.18-26.

Voici le petit script édité en root :
nano /home/script/script_purge_RAM.sh :

#!/bin/bash

echo $(sysctl vm.drop_caches=3)
exit 0

J'ai rendu ce script exécutable

chmod +x /home/script/script_purge_RAM.sh

et en vérifiant via ls -al :

-rwxrwx--- 1 root root 432 Mar 31 09:26 /home/script/script_purge_RAM.sh

Le crontab -e me donne :

00 */3 * * * /home/script/script_purge_RAM.sh

Ainsi quand je lance le script :
bash /home/script/script_purge_RAM.sh

J'obtiens :

sysctl vm.drop_caches=3

Ce qui est normal

Mais Cron me retourne :

/home/script/script_purge_RAM.sh: line 14: sysctl: command not found

J'ai vérifié le $PATH et

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

J'ai l'impression qui manque /root/bin au $PATH mais je ne sais pas comment l'ajouter.

  • # Gros mélange

    Posté par (page perso) . Évalué à 4 (+1/-0). Dernière modification le 31/03/20 à 19:15.

    J'ai l'impression qui manque /root/bin au $PATH

    Le dossier /root/bin contient quoi ?
    Il ne contient ni ton script, ni l'exécutable sysctl.
    Donc à quoi servirait ce chemin ?

     

    /home/script/script_purge_RAM.sh: line 14: sysctl: command not found

    Le message d'erreur est clair : la commande sysctl n'est pas trouvée.
    Il suffit en principe de mettre le chemin complet de l'exécutable dans ton script :

    echo $(/sbin/sysctl vm.drop_caches=3)

    Mais c'est effectivement étrange si le $PATH de cron est celui que tu dis (ce qui n'est pas certain du tout : comment as-tu vérifié que c'est le $PATH lors de l'exécution de ta tâche cron ?).

     

    purge de la Ram à intervalle régulier car j’observai que cette dernière était utilisée à 98 % très souvent pour rien.

    As-tu des problèmes de saturation de la mémoire ? Par exemple des programmes qui ne peuvent pas se lancer en raison de mémoire insuffisante.

    Quels sont les élément qui te permettent de savoir que cette mémoire est utilisée pour rien ?
    Quel programme l'utilise ? Est-ce une fuite de mémoire ?
    Si c'est un truc totalement inutile, ne peux-tu pas éviter que le programme correspondant ne soit pas lancé ?

    La commande sysctl vm.drop_caches=3 demande au noyau de vider les caches des systèmes de fichiers.
    Donc tu demandes à ton système de ne pas utiliser la mémoire libre pour optimiser les accès disques.
    Lorsque le noyau constate qu'il faut allouer de la mémoire supplémentaire pour les besoins d'un programme, il diminue la taille des caches. Ça permet de profiter de la mémoire inutilisée tout en s'assurant qu'elle est disponible.

  • # Hips!

    Posté par (page perso) . Évalué à 5 (+3/-0).

    Pourquoi avoir acheté toute cette RAM si tu veux ne pas t'en servir ? Revends-la!

    Ton ordi utilise la RAM inutilisée pour faire du cache des fichiers souvent demandés sur le disque et le noyau peut à tout moment purger ça pour faire de la place en RAM. Alors pourquoi ne pas le laisser faire ?

    La gelée de coings est une chose à ne pas avaler de travers.

  • # Euh...

    Posté par (page perso) . Évalué à 3 (+1/-0).

    J'avoue humblement avoir du mal à comprendre ce bout de code : echo $(sysctl vm.drop_caches=3). Si tu pouvais expliquer un peu, ça m'éviterais de me poser des questions sur mon état mental.

    * Ils vendront Usenet^W les boites noires quand on aura fini de les remplir.

  • # Déjà Merci

    Posté par . Évalué à 1 (+0/-0).

    Déjà merci de m'avoir lu.

    Je ne débute pas dans le monde Linux mais je reste encore un gros débutant.

    L'ordinateur est derrière un parefeu matériel complet qui bloque tous les ports vers l'extérieur du réseau interne. Je pense comprendre que, concernant l'utilisation de la RAM sur cet ordinateur, une tâche s'effectue à intervalle régulier mais que, comme certains ports sont bloqués, la RAM augmente.
    C'est une hypothèse, soyez indulgent ;-). En effet, quand je laisse les ports ouverts 123 et 80,443, la RAM reste stable. Cela pourrait venir ainsi des demandes de synchronisations NTP mais j'en sais pas plus… (et je suis très intéressé de savoir comment diagnostiquer.).


    Pour répondre à un commentaire précédent :

    echo $(sysctl vm.drop_caches=3)

    Je me suis basé sur un article : https://www.windows8facile.fr/linux-vider-memoire-ram/. Honnêtement, si je sais ce qui la sature, je m'en passerai… Je sais que ce n'est pas très judicieux de jouer avec la RAM.


    Pour la solution /sbin/sysctl…, j'essaye et vous retourne cela.


    Enfin concernant :

    As-tu des problèmes de saturation de la mémoire ? Par exemple des programmes qui ne peuvent pas se lancer en raison de mémoire insuffisante.

    Quels sont les élément qui te permettent de savoir que cette mémoire est utilisée pour rien ?
    Quel programme l'utilise ? Est-ce une fuite de mémoire ?
    Si c'est un truc totalement inutile, ne peux-tu pas éviter que le programme correspondant ne soit pas lancé ?

    Cet ordinateur est le "Master" des machines virtuelles en dessous. J'utilise Promox.
    A part la commande top ou free -h, je ne sais pas comment savoir comment la RAM est utilisé.

    • [^] # Re: Déjà Merci

      Posté par . Évalué à 3 (+1/-0).

      Cet ordinateur est le "Master" des machines virtuelles en dessous. J'utilise Promox.

      donc ca peut être une VM/CT qui consomme ta RAM
      il faut analyser les graphes de chaque VM/CT

      mais comme indiquer plus haut, tant que la machine ne swap pas, c'est normal que l'usage de RAM augmente, il faut regarde les valeurs

      ici par exemple :

      free -m
      total used free shared buff/cache available
      Mem: 32016 9961 11025 303 11029 21301
      Swap: 3068 0 3068

      sur 32Go (total), il n'en reste certes que 11Go de libre (free), mais il y en a 11Go de pris dans le buff/cache

      free a la bonne idée de preciser qu'en fait il y a en réalité 21Go de dispo (available)
      car ton noyau va réduire l'usage du cache s'il a besoin d'utiliser plus de memoire pour les programmes.

      note que le SWAP ici n'est pas utilisé

  • # [RESOLU]...

    Posté par . Évalué à 1 (+0/-0).

    Le problème de message d'erreur provenait bien de /sbin/sysctl qui n'était pas renseigné correctement.
    Merci encore à ceux qui m'ont aidé.

    J'en profite pour dire que j'ai suivi vos conseils et ai désactivé cette commande pour observer la gestion de la RAM. En effet, comme l'indiquait NeoX, la "fuite" proviendrait des machines virtuelles dont une que je soupçonne un peu plus…

    Encore merci pour l'aide.
    Prenez soin de vous.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.