đầu ra của đỉnh bị cắt ngắn thành 80 cột khi chạy bằng cron


8

Tôi đã có kịch bản đăng nhập sau đây:

#!/bin/bash
top -b -c -n 1 >> /var/log/toplog/top.log

Và hồ sơ sau đây trong crontab của tôi:

*/1 * * * *     /home/clime/scripts/toplog.sh

Vấn đề là các dòng trong top.log đang bị cắt thành 80 ký tự, ví dụ:

 1512 root      20   0 80756 1436  572 S  0.0  0.1   0:05.92 /usr/libexec/postfi

Điều này không xảy ra nếu tôi chạy lệnh trực tiếp từ bàn điều khiển.

Tôi đã thử sử dụng biến COLUMNS:

*/1 * * * *     COLUMNS=999 /home/clime/scripts/toplog.sh

Nhưng điều đó dẫn đến mỗi dòng có độ dài chính xác 999 ký tự - không gian chưa sử dụng được đệm bằng khoảng trắng, đó không phải là điều tôi muốn.

Làm thế nào để khắc phục vấn đề kỳ lạ này? Hệ thống của tôi là centos 6.3.


Tôi không biết điều này có liên quan không nhưng ý nghĩa của nó là /1gì? Nó hoạt động nếu bạn chỉ đơn giản sử dụng * * * * *? */1*cả hai có nghĩa là chạy mỗi phút.
terdon

Các bạn, /1không cần phải ở đó. Tôi đã thay đổi nó. Vấn đề vẫn tồn tại.
clime

Câu trả lời:


8

topluôn hiển thị khoảng trắng cho đến cột màn hình cuối cùng. Bạn chỉ không nhận ra điều đó khi nó in ra thiết bị đầu cuối bởi vì bạn không thể phân biệt trực quan một dòng với các khoảng trắng ở cuối một dòng mà không có dấu cách. Bạn sẽ nhận thấy khoảng trắng nếu bạn sao chép-dán bằng chuột hoặc trong screen.

Nếu bạn muốn thoát khỏi không gian, chỉ cần lọc chúng đi.

COLUMNS=9999 top -b -c -n 1 | sed 's/  *$//' >>/var/log/toplog/top.log

Dù bạn đang chạy topvì mục đích gì, có lẽ có nhiều công cụ giám sát tốt hơn .


1
Tôi sử dụng điều này để giữ thông tin về các quy trình đang chạy bất cứ lúc nào trong năm ngày qua. Đây là những ảnh chụp nhanh trong 1 phút để một cái gì đó có thể bị mất nhưng tôi nghĩ nó đủ tốt cho tôi. Tôi muốn có sẵn một số dữ liệu khi tôi phát hiện ra có mức cao nhất trong việc sử dụng tài nguyên (tôi sử dụng munin cho việc đó). Tôi đã không tìm thấy một cách tốt hơn để theo dõi các quá trình trong quá khứ (đã thử psacct).
clime

Chỉ thấy điều này khi chạy một kịch bản kiểm tra thông qua nrpe. Đầu ra của psđã bị cắt ngắn thành 80 ký tự và một grep cho tên quá trình không thành công. Cài đặt COLUMNS đã giải quyết vấn đề.
phil-lavin

0

Tôi đã có một vấn đề tương tự. Tập lệnh Bash hoạt động tốt từ dòng lệnh nhưng đầu ra 'trên cùng' bị cắt thành 80 ký tự khi chạy từ cron.

Trước tiên tôi đã thử giải pháp được chấp nhận ở đây, bằng cách đặt biến môi trường COLUMNS. Tôi không thể làm việc này (SLES 12.1). Tôi thậm chí đã cố gắng ghi vào một tập tin, xuất, nguồn hồ sơ tùy chỉnh.

Những gì đã làm việc là sử dụng tùy chọn -w hàng đầu.
Đây là can đảm trong kịch bản của tôi, trừ đi thông báo và giết chết những thứ an toàn.

#!/usr/bin/sh

PROC_FOUND=""
MAX_CPU=0

RETVAL="$(top -bc -n 1 -w 512 | tail -n+8 | awk -v cpulimit=$MAX_CPU '{if ($9>=cpulimit) print $1 " " $9 " " $12; }')"

IFS='
'
set -f
for line in ${RETVAL}; do
{
        echo "found [$line]" > /dev/tty

        IFS=', '
        read -r -a array <<< "$line"
        #echo "array is ... ${array[*]}"
        PID_VAL=${array[0]}
        CPU_VAL=${array[1]}
        PROC_FOUND=${array[2]}

        echo "Monitored a High CPU for process [${PROC_FOUND} ${PID_VAL}] on "${HOSTNAME}" where ${CPU_VAL}% >= ${MAX_CPU}%."
}
done
set +f
unset IFS
exit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.