Probleme mit dem Cron-Skript und der TERM-Definition mit dem Befehl top

11

Ich habe ein Problem beim Ausführen eines Cron-Prozesses, um die aktuelle CPU-Auslastung auf meinem Server zu überprüfen.

Mein Skript beginnt mit:

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

Ich kann ohne Probleme in der Konsole ausführen, aber in Cron bekomme ich

oben: fehlgeschlagen tty bekommen

Wenn ich die Option -b zum Top verwende

top -b -n 1

Ich bekomme

'dumm': unbekannter Terminaltyp.

Ich benutze xterm als TERM

Danke für deine Hilfe :)
Lito.

LÖSUNG: Ich konnte das Problem lösen mit:

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

Antworten:

8

Sie können etwas versuchen wie:

TERM=vt100 top -b -n 1

Dadurch wird die TERM-Variable so eingestellt, dass sie mit dem Befehl "top" ausgeführt wird.

Ihr zugrunde liegendes Problem ist jedoch, dass Ihre Termcap-Datenbank unvollständig oder fehlerhaft ist. Ich habe keine Debian-Maschine zum Anschauen, aber auf einer Ubuntu-Box befinden sich die "dummen" Termcap-Informationen in der Datei / usr / share / terminfo / d / dumm. Diese Datei ist Teil des ncurses-base-Pakets unter Ubuntu 8.04 und 10.04. Auf RHEL ist es Teil des ncurses-Pakets. Vielleicht fehlt Ihrer Installation einfach diese Datei?

cjc
quelle
Ja, ich habe gerade in der obersten Quelle herumgegraben und wenn Sie den Batch-Modus wählen, wird TERM auf dumm gesetzt.
user9517
Nein, das Problem wird mit diesem Befehl nicht gelöst: root @ server: ~ # TERM = vt100 top -b -n 1 'dumm': unbekannter Terminaltyp. root @ server: ~ # ls / usr / share / terminfo / d / dumm ls: / usr / share / terminfo / d / dumm: Keine solche Datei oder kein solches Verzeichnis Ich habe 286 Dateien im Ordner / usr / share / terminfo / d /
Lito
OK, Sie müssen herausfinden, warum die Datei / usr / share / terminfo / d / dumm in diesem System fehlt. Wie bereits erwähnt, habe ich keine Debian-Box zum Spielen. Unter Ubuntu ist das Paket, das diese Datei bereitstellt, "ncurses-base". Vielleicht können Sie "apt-cache search dumm" machen, um herauszufinden, welches Paket Sie auf Debian benötigen. Ich nehme an, Sie können die Datei auch von Ihrer funktionierenden Debian-Box kopieren, aber es ist besser herauszufinden, ob ein Paket fehlt oder kaputt ist.
cjc
Ja, apt-cache search dumm | grep term = ncurses-base, aber die Installation / Neuinstallation des Pakets löst mein Problem nicht. Auf meinem anderen (Entwicklungs-) Debian 6-Server (gleiche Version wie die Produktion) kann ich "top-b" ohne Probleme ausführen und ich habe diese dumme Termdatei nicht ...
Lito
Führen Sie so etwas wie "strace top -b -n 1 2> & 1 | grep term" aus. Dies zeigt Ihnen die terminfo-Dateien, auf die der Befehl "top" zugreift. Tun Sie dies auf der Box, an der alles arbeitet, und auf der Box, an der es nicht funktioniert. Ich habe es gerade auf einer RHEL-Box ausgeführt und es sucht zuerst in ~ / .terminfo / d / dumm nach terminfo. Möglicherweise hat der Benutzer, der das Cron auf der anderen Box ausführt, diese Datei. Wenn nicht, zeigt "strace" an, was der Befehl "top" tatsächlich tut.
CJC