Problemas com script cron e definição de TERM usando o comando top

11

Estou com um problema ao executar um processo cron para verificar o uso atual da CPU no meu servidor.

Meu script começa com:

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

Eu posso executar sem problemas no console, mas no cron eu recebo

top: falha na obtenção de tty

Se eu usar a opção -b para cima

top -b -n 1

eu recebo

'dumb': tipo de terminal desconhecido.

Estou usando o xterm como TERM

Obrigado pela sua ajuda :)
Lito.

SOLUÇÃO: Consegui resolver o problema com:

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

Respostas:

8

Você pode tentar algo como:

TERM=vt100 top -b -n 1

Isso definirá a variável TERM para executar com o comando "top".

Mas o seu problema subjacente é que o banco de dados do termcap está incompleto ou quebrado. Eu não tenho uma máquina Debian para olhar, mas em uma caixa do Ubuntu, as informações "idiotas" do termcap estão no arquivo / usr / share / terminfo / d / dumb. Este arquivo faz parte do pacote ncurses-base no Ubuntu 8.04 e 10.04. No RHEL, faz parte do pacote ncurses. Talvez a sua instalação esteja simplesmente sem esse arquivo?

cjc
fonte
Sim, eu estava apenas pesquisando a fonte principal e, se você escolher o modo em lote, ele define TERM como idiota.
user9517
Não, o problema não é resolvido com este comando: root @ server: ~ # TERM = vt100 top -b -n 1 'dumb': tipo de terminal desconhecido. root @ server: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: não existe esse arquivo ou diretório. Eu tenho 286 arquivos na pasta / usr / share / terminfo / d /
Lito
OK, você terá que descobrir por que o arquivo / usr / share / terminfo / d / dumb está ausente nesse sistema. Como observado, eu não tenho uma caixa Debian para brincar. No Ubuntu, o pacote que fornece esse arquivo é "ncurses-base". Talvez você possa fazer "apt-cache search dumb" para descobrir qual pacote você precisará no Debian. Suponho que você também pode copiar o arquivo da sua caixa de trabalho do Debian, mas seria melhor descobrir se um pacote está ausente ou quebrado.
CJC
Sim, pesquisa apt-cache burra | grep term = ncurses-base, mas instalar / reinstalar o pacote não resolve o meu problema. No meu outro servidor (desenvolvimento) Debian 6 (mesma versão que produção) eu posso executar "top-b" sem problemas e não tenho esse arquivo idiota ...
Lito
Execute algo como "strace top -b -n 1 2> & 1 | grep term". Isso mostrará os arquivos terminfo que o comando "top" está acessando. Faça isso na caixa em que tudo está funcionando e na caixa em que não está funcionando. Acabei de executá-lo em uma caixa RHEL e ele procura o terminfo primeiro em ~ / .terminfo / d / dumb. Possivelmente, o usuário executando o cron na outra caixa possui esse arquivo. Caso contrário, "strace" mostrará o que o comando "top" está realmente fazendo.
CJC