top 명령을 사용하는 cron 스크립트 및 TERM 정의 문제


11

서버에서 현재 CPU 사용을 확인하기 위해 cron 프로세스를 실행하는 데 문제가 있습니다.

내 스크립트는 다음으로 시작합니다.

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

콘솔에서 문제없이 실행할 수 있지만 cron에서는

상단 : tty get에 실패했습니다

상단에 -b 옵션을 사용하면

top -b -n 1

나는 얻다

'dumb': 알 수없는 터미널 유형입니다.

xterm을 TERM으로 사용하고 있습니다

도와 주셔서 감사합니다 :)
Lito.

해결책 : 다음 과 같은 문제를 해결할 수있었습니다.

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

답변:


8

다음과 같은 것을 시도해 볼 수 있습니다.

TERM=vt100 top -b -n 1

"top"명령으로 TERM 변수를 실행하도록 설정합니다.

그러나 근본적인 문제는 termcap 데이터베이스가 불완전하거나 손상되었다는 것입니다. 데비안 머신은 없지만, 우분투 박스에서 "dumb"termcap info는 / usr / share / terminfo / d / dumb 파일에 있습니다. 이 파일은 Ubuntu 8.04 및 10.04의 ncurses-base 패키지의 일부입니다. RHEL에서는 ncurses 패키지의 일부입니다. 설치에이 파일이없는 것 같습니다.


그래, 나는 단지 최고 소스에서 파고 있었고 배치 모드를 선택하면 TERM을 바보로 설정합니다.
user9517

아니오, 다음 명령으로 문제가 해결되지 않습니다. 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 파일이없는 이유를 알아 내야합니다. 언급했듯이, 데비안 상자를 가지고 있지 않습니다. Ubuntu에서 해당 파일을 제공하는 패키지는 "ncurses-base"입니다. 아마도 "apt-cache search dumb"을 사용하여 데비안에 필요한 패키지를 알아낼 수 있습니다. 작업중 인 데비안 상자에서 파일을 복사 할 수도 있지만 패키지가 없거나 파손되었는지 확인하는 것이 좋습니다.
cjc

예, apt-cache 검색 바보 | grep term = ncurses-base이지만 패키지를 설치 / 재설치해도 문제가 해결되지 않습니다. 내 다른 (개발) 데비안 6 서버 (제작과 같은 버전)에서 문제없이 "top -b"를 실행할 수
있으며이

"strace top -b -n 1 2> & 1 | grep term"과 같은 것을 실행하십시오. "top"명령이 액세스하고있는 terminfo 파일이 표시됩니다. 모든 것이 작동하는 상자와 작동하지 않는 상자 에서이 작업을 수행하십시오. 방금 RHEL 상자에서 실행했으며 ~ / .terminfo / d / dumb에서 terminfo를 먼저 찾습니다. 다른 상자에서 크론을 실행하는 사용자가 해당 파일을 가지고있을 수 있습니다. 그렇지 않은 경우 "strace"는 "top"명령이 실제로 수행하는 작업을 보여줍니다.
cjc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.