Problèmes avec le script cron et la définition TERM à l'aide de la commande top

11

J'ai un problème lors de l'exécution d'un processus cron pour vérifier l'utilisation actuelle du processeur sur mon serveur.

Mon script commence par:

top -c -n 1 -u www-data > /tmp/kill-cpu

Je peux exécuter sans problème dans la console, mais en cron je reçois

haut: échec du tty

Si j'utilise l'option -b en haut

top -b -n 1

Je reçois

'muet': type de terminal inconnu.

J'utilise xterm comme TERM

Merci pour votre aide :)
Lito.

SOLUTION: j'ai pu résoudre le problème avec:

ln -s /lib/terminfo/d/dumb /usr/share/terminfo/d/dumb
Lito
la source

Réponses:

8

Vous pouvez essayer quelque chose comme:

TERM=vt100 top -b -n 1

Cela définira la variable TERM à exécuter avec la commande "top".

Mais votre problème sous-jacent est que votre base de données termcap est incomplète ou cassée. Je n'ai pas de machine Debian à regarder, mais sur une boîte Ubuntu, les informations "dumb" termcap se trouvent dans le fichier / usr / share / terminfo / d / dumb. Ce fichier fait partie du package ncurses-base sur Ubuntu 8.04 et 10.04. Sur RHEL, cela fait partie du package ncurses. Peut-être que votre installation manque simplement ce fichier?

cjc
la source
Oui, je cherchais juste dans la source supérieure et si vous choisissez le mode batch, il définit TERM sur muet.
user9517
Non, le problème n'est pas résolu avec cette commande: root @ server: ~ # TERM = vt100 top -b -n 1 'dumb': type de terminal inconnu. root @ server: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: Aucun fichier ou répertoire de ce type J'ai 286 fichiers dans le dossier / usr / share / terminfo / d /
Lito
OK, vous devrez comprendre pourquoi le fichier / usr / share / terminfo / d / dumb est absent de ce système. Comme indiqué, je n'ai pas de boîte Debian avec laquelle jouer. Sur Ubuntu, le package qui fournit ce fichier est "ncurses-base". Vous pouvez peut-être faire une "recherche stupide d'apt-cache" pour déterminer le paquet dont vous aurez besoin sur Debian. Je suppose que vous pouvez également copier le fichier à partir de votre boîte Debian de travail, mais il serait préférable de déterminer si un paquet est manquant ou cassé.
cjc
Oui, la recherche d'apt-cache est stupide | grep term = ncurses-base mais installer / réinstaller le paquet ne résout pas mon problème. Dans mon autre serveur Debian 6 (en développement) (même version que la production), je peux exécuter "top -b" sans problème et je n'ai pas ce fichier de terme stupide ...
Lito
Exécutez quelque chose comme "strace top -b -n 1 2> & 1 | grep term". Cela vous montrera les fichiers terminfo auxquels la commande "top" accède. Faites-le sur la boîte sur laquelle tout fonctionne et sur la boîte sur laquelle il ne fonctionne pas. Je viens de l'exécuter sur une boîte RHEL, et il recherche d'abord terminfo dans ~ / .terminfo / d / dumb. Il est possible que l'utilisateur exécutant le cron sur l'autre box ait ce fichier. Sinon, "strace" montrera ce que fait réellement la commande "top".
cjc