Проблеми зі сценарієм cron та визначенням TERM за допомогою команди top


11

У мене є проблема з виконанням процесу cron для перевірки поточного використання процесора на моєму сервері.

Мій сценарій починається з:

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

Я можу без проблем виконувати в консолі, але в cron я отримую

вгору: не вдалося отримати tty get

Якщо я використовую варіант -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".

Але основна ваша проблема полягає в тому, що база даних термінальних файлів неповна або зламана. У мене немає пристрою Debian для розгляду, але у вікні Ubuntu інформація про "тупу" термінальну капу знаходиться у файлі / usr / share / terminfo / d / dumb. Цей файл є частиною базових пакетів ncurses для Ubuntu 8.04 та 10.04. На RHEL це частина пакету ncurses. Можливо, у вашій установці просто відсутній цей файл?


Так, я просто копався у верхньому джерелі, і якщо ви виберете пакетний режим, він встановлює ТЕРМ на німий.
користувач9517

Ні, проблема не вирішена за допомогою цієї команди: root @ server: ~ # TERM = vt100 top -b -n 1 'dumb': невідомий тип терміналу. root @ server: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: У папці / usr / share / terminfo / d / немає такого файлу чи каталогу, у мене є 286 файлів
Lito

Гаразд, вам доведеться з’ясувати, чому файл / usr / share / terminfo / d / dumb відсутній у цій системі. Як зазначалося, у мене немає коробки Debian, з якою можна було б грати. У Ubuntu пакет, що забезпечує цей файл, є "ncurses-base". Можливо, ви можете зробити "apt-кеш-пошуку", щоб зрозуміти, який пакет вам знадобиться на Debian. Я припускаю, що ви також можете скопіювати файл з робочого вікна Debian, але було б краще розібратися, якщо пакет відсутній чи зламаний.
cjc

Так, apt-кеш-пошук німий | grep term = ncurses-base, але встановлення / перевстановлення пакету не вирішує мою проблему. В іншому (розробці) сервері Debian 6 (така ж версія, як і виробництво) я можу без проблем виконувати "top -b", і я не маю цього файлу безглуздих термінів ...
Lito,

Виконайте щось на кшталт "strace top -b -n 1 2> & 1 | grep term". Це покаже вам файли terminfo, до яких звертається команда "верхній". Зробіть це на коробці, над якою працює все, і на коробці, над якою вона не працює. Я щойно запустив його на коробці RHEL, і він шукає terminfo спочатку в ~ / .terminfo / d / dumb. Можливо, користувач, що виконує крон в іншому полі, має цей файл. Якщо ні, "strace" покаже, що насправді робить команда "top".
cjc
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.