Проблемы со скриптом cron и определением TERM с помощью команды top


11

У меня проблема с выполнением процесса cron для проверки текущего использования процессора на моем сервере.

Мой сценарий начинается с:

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

Я могу выполнить без проблем в консоли, но в Cron я получаю

top: не удалось получить tty

Если я использую опцию -b сверху

top -b -n 1

я получил

'тупой': неизвестный тип терминала.

Я использую Xterm в качестве срока

Спасибо за вашу помощь :)
Лито.

РЕШЕНИЕ: я смог решить проблему с:

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

Ответы:


8

Вы можете попробовать что-то вроде:

TERM=vt100 top -b -n 1

Это установит переменную TERM для выполнения командой top.

Но ваша основная проблема в том, что ваша база данных termcap неполна или повреждена. У меня нет машины Debian, но на коробке с Ubuntu «тупая» информация termcap находится в файле / usr / share / terminfo / d / dumb. Этот файл является частью пакета ncurses-base в Ubuntu 8.04 и 10.04. На RHEL это часть пакета ncurses. Возможно, в вашей установке просто отсутствует этот файл?


Да, я просто копался в верхнем источнике, и если вы выбираете пакетный режим, он устанавливает TERM в тупик.
user9517

Нет, проблема не решается с помощью этой команды: root @ server: ~ # TERM = vt100 top -b -n 1 'немой': неизвестный тип терминала. root @ server: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: нет такого файла или каталога. У меня есть 286 файлов в папке / usr / share / terminfo / d /
Лито

Хорошо, вам нужно выяснить, почему в этой системе отсутствует файл / usr / share / terminfo / d / dumb. Как уже отмечалось, у меня нет коробки Debian для игры. В Ubuntu пакет, предоставляющий этот файл, называется «ncurses-base». Возможно, вы можете выполнить «apt-cache search dumb», чтобы выяснить, какой пакет вам понадобится в Debian. Я полагаю, вы также можете скопировать файл из вашей рабочей коробки Debian, но было бы лучше выяснить, отсутствует ли пакет или сломан.
CJC

Да, apt-cache поиск тупой | grep term = ncurses-base, но установка / переустановка пакета не решает мою проблему. На моем другом (развивающемся) сервере Debian 6 (той же версии, что и на производстве) я могу без проблем выполнить «top -b», и у меня нет этого файла тупого термина ...
Lito

Запустите что-то вроде «strace top -b -n 1 2> & 1 | grep term». Это покажет вам файлы terminfo, к которым обращается команда top. Сделайте это на коробке, на которой все работает, и на коробке, на которой он не работает. Я просто запустил его в окне RHEL, и он сначала ищет terminfo в ~ / .terminfo / d / dumb. Возможно, пользователь, выполняющий cron в другом окне, имеет этот файл. Если нет, «strace» покажет, что на самом деле делает команда «top».
CJC
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.