Có một công cụ để vẽ đồ thị, phân tích và giúp tối ưu hóa việc thực hiện crontab không?
Để làm rõ, tôi đang nghĩ về một công cụ sẽ tạo ra một biểu đồ khi các công việc định kỳ được thực thi và giúp sysadmin sắp xếp lại chúng một cách thông minh.
Có một công cụ để vẽ đồ thị, phân tích và giúp tối ưu hóa việc thực hiện crontab không?
Để làm rõ, tôi đang nghĩ về một công cụ sẽ tạo ra một biểu đồ khi các công việc định kỳ được thực thi và giúp sysadmin sắp xếp lại chúng một cách thông minh.
Câu trả lời:
Điều duy nhất tôi đã làm là chuyển các công việc định kỳ thành một lịch trình công việc có cấu trúc để biểu đồ phụ thuộc và hiển thị các cửa sổ thời gian chết hiệu ứng.
Một số loại khung để gán một ID duy nhất cho mỗi công việc định kỳ và tương quan với trong tệp nhật ký và / hoặc ghi nhật ký đến một vị trí cụ thể để ghi thông tin thời gian chạy (trái ngược với nhật ký đầu ra thông thường). Tuy nhiên, nó sẽ không tầm thường khi bạn thiết kế nó, nhưng đối với các hệ thống nhỏ, bạn có thể dễ dàng nhận ra điều này khi nhìn vào crontabs và các tệp nhật ký của bạn.
Tôi cho rằng bạn không nói về các hệ thống nhỏ, mặc dù.
Âm thanh như thế này là chức năng mà bạn thích http://www.phpgroupes.org/package/6673-PHP-Pude-crontab-schedule-and-generate-Gantt-charts.html
Tôi không thể đảm bảo cho những điều trên, nó chỉ là kết quả của một số tìm kiếm trên web.
Một tập lệnh để in tất cả các tác vụ hệ thống được sắp xếp theo thời gian
#!/bin/bash
CRONTAB='/etc/crontab'
CRONDIR='/etc/cron.d'
tab=$(echo -en "\t")
function clean_cron_lines() {
while read line ; do
echo "${line}" |
egrep --invert-match '^($|\s*#|\s*[[:alnum:]_]+=)' |
sed --regexp-extended "s/\s+/ /g" |
sed --regexp-extended "s/^ //"
done;
}
function lookup_run_parts() {
while read line ; do
match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
if [[ -z "${match}" ]] ; then
echo "${line}"
else
cron_fields=$(echo "${line}" | cut -f1-6 -d' ')
cron_job_dir=$(echo "${match}" | awk '{print $NF}')
if [[ -d "${cron_job_dir}" ]] ; then
for cron_job_file in "${cron_job_dir}"/* ; do # */ <not a comment>
[[ -f "${cron_job_file}" ]] && echo "${cron_fields} ${cron_job_file}"
done
fi
fi
done;
}
temp=$(mktemp) || exit 1
cat "${CRONTAB}" | clean_cron_lines | lookup_run_parts >"${temp}"
cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}" # */ <not a comment>
while read user ; do
crontab -l -u "${user}" 2>/dev/null |
clean_cron_lines |
sed --regexp-extended "s/^((\S+ +){5})(.+)$/\1${user} \3/" >>"${temp}"
done < <(cut --fields=1 --delimiter=: /etc/passwd)
cat "${temp}" |
sed --regexp-extended "s/^(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(\S+) +(.*)$/\1\t\2\t\3\t\4\t\5\t\6\t\7/" |
sort --numeric-sort --field-separator="${tab}" --key=2 --key=1 |
sed "1i\mi\th\td\tm\tw\tuser\tcommand" |
column -s"${tab}" -t
rm --force "${temp}"