Problemas con el script cron y la definición TERM utilizando el comando top

11

Tengo un problema al ejecutar un proceso cron para verificar el uso actual de la CPU en mi servidor.

Mi script comienza con:

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

Puedo ejecutar sin problemas en la consola, pero en cron obtengo

arriba: tty fallido

Si uso la opción -b para arriba

top -b -n 1

yo obtengo

'tonto': tipo de terminal desconocido.

Estoy usando xterm como TERM

Gracias por tu ayuda :)
Lito.

SOLUCIÓN: Pude resolver el problema con:

ln -s /lib/terminfo/d/dumb /usr/share/terminfo/d/dumb
Lito
fuente

Respuestas:

8

Puedes probar algo como:

TERM=vt100 top -b -n 1

Esto establecerá la variable TERM para ejecutar con el comando "top".

Pero su problema subyacente es que su base de datos de termcap está incompleta o rota. No tengo una máquina Debian para mirar, pero en un cuadro de Ubuntu, la información de tapa de término "tonta" está en el archivo / usr / share / terminfo / d / dumb. Este archivo es parte del paquete ncurses-base en Ubuntu 8.04 y 10.04. En RHEL, es parte del paquete ncurses. Quizás su instalación simplemente falta este archivo?

cjc
fuente
Sí, solo estaba cavando en la fuente superior y si eliges el modo por lotes, configura TERM como tonto.
user9517
No, el problema no se resuelve con este comando: root @ server: ~ # TERM = vt100 top -b -n 1 'dumb': tipo de terminal desconocido. root @ server: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: No existe tal archivo o directorio. Tengo 286 archivos en la carpeta / usr / share / terminfo / d /
Lito
OK, tendrá que descubrir por qué el archivo / usr / share / terminfo / d / dumb falta en ese sistema. Como se señaló, no tengo una caja de Debian para jugar. En Ubuntu, el paquete que proporciona ese archivo es "ncurses-base". Quizás pueda hacer "apt-cache search dumb" para averiguar qué paquete necesitará en Debian. Supongo que también puede copiar el archivo de su caja de Debian en funcionamiento, pero sería mejor averiguar si un paquete falta o está roto.
cjc
Sí, la búsqueda de apt-cache es tonta | grep term = ncurses-base pero instalar / reinstalar el paquete no resuelve mi problema. En mi otro servidor (de desarrollo) Debian 6 (misma versión que producción) puedo ejecutar "top -b" sin problemas y no tengo este archivo de términos tontos ...
Lito
Ejecute algo como "strace top -b -n 1 2> & 1 | grep term". Esto le mostrará los archivos terminfo a los que está accediendo el comando "superior". Haga esto en la caja en la que todo funciona y en la caja en la que no funciona. Acabo de ejecutarlo en un cuadro RHEL, y busca terminfo primero en ~ / .terminfo / d / dumb. Posiblemente, el usuario que ejecuta el cron en el otro cuadro tiene ese archivo. Si no, "strace" mostrará lo que el comando "top" está haciendo realmente.
cjc