Masalah dengan skrip cron dan definisi TERM menggunakan perintah atas

11

Saya memiliki masalah dalam menjalankan proses cron untuk memeriksa penggunaan CPU saat ini di server saya.

Skrip saya mulai dengan:

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

Saya dapat mengeksekusi tanpa masalah di konsol, tetapi di cron saya dapatkan

atas: gagal dapatkan

Jika saya menggunakan opsi -b ke atas

top -b -n 1

saya mendapat

'dumb': tipe terminal tidak dikenal.

Saya menggunakan xterm sebagai TERM

Terima kasih atas bantuan Anda :)
Lito.

SOLUSI: Saya dapat menyelesaikan masalah dengan:

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

Jawaban:

8

Anda dapat mencoba sesuatu seperti:

TERM=vt100 top -b -n 1

Ini akan mengatur variabel TERM untuk dieksekusi dengan perintah "top".

Tetapi masalah mendasar Anda adalah bahwa termcap database Anda tidak lengkap atau rusak. Saya tidak memiliki mesin Debian untuk dilihat, tetapi pada kotak Ubuntu, info termcap "dumb" ada di file / usr / share / terminfo / d / dumb. File ini adalah bagian dari paket ncurses-base di Ubuntu 8.04 dan 10.04. Di RHEL, ini adalah bagian dari paket ncurses. Mungkin instalasi Anda hanya melewatkan file ini?

cjc
sumber
Yap, saya baru saja mencari-cari di sumber teratas dan jika Anda memilih mode batch, ini akan membuat TERM menjadi bodoh.
user9517
Tidak, masalah tidak terpecahkan dengan perintah ini: root @ server: ~ # TERM = vt100 top -b -n 1 'dumb': tipe terminal tidak dikenal. root @ server: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: Tidak ada file atau direktori tersebut Saya memiliki 286 file di folder / usr / share / terminfo / d /
Lito
OK, Anda harus mencari tahu mengapa file / usr / share / terminfo / d / dumb hilang dari sistem itu. Seperti disebutkan, saya tidak punya kotak Debian untuk dimainkan. Di Ubuntu, paket yang menyediakan file itu adalah "ncurses-base". Mungkin Anda bisa melakukan "apt-cache search dumb" untuk mencari tahu paket mana yang Anda perlukan di Debian. Saya kira Anda juga dapat menyalin file dari kotak Debian Anda yang berfungsi, tetapi akan lebih baik untuk mengetahui apakah suatu paket hilang atau rusak.
cjc
Ya, pencarian apt-cache bodoh | grep term = ncurses-base tetapi menginstal / menginstal ulang paket tidak menyelesaikan masalah saya. Dalam server (pengembangan) Debian 6 saya yang lain (versi yang sama dengan produksi) saya dapat menjalankan "top -b" tanpa masalah dan saya tidak memiliki file istilah bodoh ini ...
Lito
Jalankan sesuatu seperti "strace top -b -n 1 2> & 1 | grep term". Ini akan menunjukkan kepada Anda file terminfo yang diakses oleh perintah "atas". Lakukan ini pada kotak yang semuanya berfungsi, dan kotak yang tidak berfungsi. Saya hanya menjalankannya di kotak RHEL, dan mencari terminfo pertama di ~ / .terminfo / d / dumb. Mungkin, pengguna yang menjalankan cron di kotak lain memiliki file itu. Jika tidak, "strace" akan menunjukkan apa yang sebenarnya dilakukan perintah "atas".
cjc