使用top命令的cron脚本和TERM定义问题


11

我在执行cron进程以检查服务器中当前的CPU使用率时遇到问题。

我的脚本开始于:

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

我可以在控制台中毫无问题地执行,但是在cron中我得到了

顶部:tty失败

如果我在顶部使用-b选项

top -b -n 1

我懂了

'dumb':未知的终端类型。

我正在将xterm用作TERM

感谢您的帮助:)
Lito。

解决方案:我能够通过以下方式解决问题:

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

Answers:


8

您可以尝试类似:

TERM=vt100 top -b -n 1

这将设置TERM变量以使用“ top”命令执行。

但是您的根本问题是termcap数据库不完整或损坏。我没有Debian机器,但是在Ubuntu机器上,“哑” termcap信息位于文件/ usr / share / terminfo / d / dumb中。该文件是Ubuntu 8.04和10.04上基于ncurses的软件包的一部分。在RHEL上,它是ncurses软件包的一部分。也许您的安装只是缺少此文件?


是的,我只是在搜索顶级资源,如果您选择批处理模式,它将TERM设为哑。
user9517 2011年

否,此命令不能解决问题: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-cache search dumb”以弄清楚在Debian上需要哪个软件包。我想您也可以从工作的Debian盒子中复制文件,但是最好弄清楚是否丢失或损坏了一个包装。
cjc 2011年

是的,apt-cache搜索很笨。grep term = ncurses-base但安装/重新安装软件包不能解决我的问题。在我的另一台(开发中)Debian 6服务器(与生产版本相同)中,我可以毫无问题地执行“ top -b”,而且我没有这个笨拙的术语文件……
Lito

运行类似“ strace top -b -n 1 2>&1 | grep term”的内容。这将显示“ top”命令正在访问的terminfo文件。在所有正在运行的盒子上以及不在运行的盒子上执行此操作。我只是在RHEL盒子上运行它,然后它首先在〜/ .terminfo / d / dumb中查找terminfo。可能是,在另一个框上执行cron的用户拥有该文件。如果没有,“ strace”将显示“ top”命令的实际作用。
cjc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.