ปัญหาเกี่ยวกับ cron script และ TERM definition โดยใช้คำสั่ง top


11

ฉันมีปัญหาในการประมวลผล cron เพื่อตรวจสอบการใช้ CPU ปัจจุบันในเซิร์ฟเวอร์ของฉัน

สคริปต์ของฉันเริ่มต้นด้วย:

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

ฉันสามารถดำเนินการได้โดยไม่มีปัญหาในคอนโซล แต่ใน cron ฉันได้รับ

รับ tty ที่ล้มเหลว

ถ้าฉันใช้ตัวเลือก -b ไปด้านบน

top -b -n 1

ฉันเข้าใจ

'ใบ้': ประเภทอาคารที่ไม่รู้จัก

ฉันใช้ xterm เป็น TERM

ขอบคุณสำหรับความช่วยเหลือของคุณ :)
Lito

การแก้ไข:ฉันสามารถแก้ไขปัญหาด้วย:

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

คำตอบ:


8

คุณสามารถลองสิ่งต่อไปนี้:

TERM=vt100 top -b -n 1

สิ่งนี้จะตั้งค่าตัวแปร TERM ให้ทำงานด้วยคำสั่ง "top"

แต่ปัญหาพื้นฐานของคุณคือฐานข้อมูล termcap ของคุณไม่สมบูรณ์หรือเสียหาย ฉันไม่มีเครื่อง Debian ที่จะดู แต่ในกล่อง Ubuntu ข้อมูล termcap "dumb" อยู่ในไฟล์ / usr / share / terminfo / d / dumb ไฟล์นี้เป็นส่วนหนึ่งของแพ็คเกจ ncurses-base บน Ubuntu 8.04 และ 10.04 บน RHEL เป็นส่วนหนึ่งของแพ็คเกจ ncurses บางทีการติดตั้งของคุณอาจหายไปในไฟล์นี้?


ใช่ฉันเพิ่งขุดไปรอบ ๆ ในแหล่งที่มาด้านบนและถ้าคุณเลือกโหมดแบทช์มันตั้งค่าระยะเป็นใบ้
user9517

ไม่ปัญหาไม่ได้รับการแก้ไขด้วยคำสั่งนี้: root @ server: ~ # TERM = vt100 top -b -n 1 'dumb': ประเภทเทอร์มินัลที่ไม่รู้จัก เซิร์ฟเวอร์ root @: ~ # ls / usr / share / terminfo / d / dumb ls: / usr / share / terminfo / d / dumb: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวฉันมี 286 ไฟล์ใน / usr / share / terminfo / d / โฟลเดอร์
Lito

ตกลงคุณจะต้องคิดออกว่าเหตุใดไฟล์ / usr / share / terminfo / d / dumb จึงหายไปจากระบบนั้น ตามที่ระบุไว้ฉันไม่มีกล่อง Debian ที่จะเล่นด้วย บน Ubuntu แพ็คเกจที่ให้ไฟล์นั้นคือ "ncurses-base" บางทีคุณสามารถทำ "apt-cache search dumb" เพื่อค้นหาแพ็คเกจที่คุณต้องการบน Debian ฉันคิดว่าคุณสามารถคัดลอกไฟล์จากกล่อง Debian ที่ใช้งานได้ แต่จะดีกว่าถ้าคุณคิดว่าแพ็คเกจขาดหายไปหรือเสียหาย
cjc

ใช่ apt-cache search dumb | grep term = ncurses-base แต่การติดตั้ง / ติดตั้งแพคเกจใหม่ไม่สามารถแก้ปัญหาของฉันได้ ในเซิร์ฟเวอร์ Debian 6 อื่น ๆ ของฉัน (รุ่นเดียวกันกับที่ใช้งานจริง) ฉันสามารถรัน "top -b" ได้โดยไม่มีปัญหาและฉันไม่ได้ไฟล์เทอมนี้ ...
Lito

เรียกใช้บางอย่างเช่น "strace top -b -n 1 2> & 1 | grep term" นี่จะแสดงไฟล์ terminfo ที่คำสั่ง "top" กำลังเข้าถึง ทำสิ่งนี้บนกล่องทุกอย่างกำลังทำงานอยู่และกล่องที่มันไม่ทำงาน ฉันเพิ่งรันมันบนกล่อง RHEL และมันจะหา terminfo เป็นอันดับแรกใน ~ / .terminfo / d / dumb อาจเป็นไปได้ว่าผู้ใช้ที่ดำเนินการ cron บนกล่องอื่น ๆ มีไฟล์นั้น ถ้าไม่ "strace" จะแสดงสิ่งที่คำสั่ง "top" กำลังทำอยู่
cjc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.