Analisis dan optimalkan crontab [ditutup]

9

Apakah ada alat untuk membuat grafik, menganalisis dan membantu mengoptimalkan eksekusi crontab?

Untuk memperjelas, saya sedang memikirkan alat yang akan menghasilkan grafik ketika pekerjaan cron dieksekusi, dan membantu sysadmin mengatur ulang mereka dengan cerdas.

ℝaphink
sumber
1
Saya tidak bisa memikirkan apa pun di luar kepala saya, tetapi hari libur Bank Senin besok, jadi saya bisa mencoba menulisnya.
Tom O'Connor

Jawaban:

4

Satu-satunya hal yang telah saya lakukan adalah memindahkan pekerjaan cron ke penjadwal pekerjaan terstruktur untuk membuat grafik ketergantungan dan mendapatkan visibilitas ke efek jendela downtime.

putih
sumber
Itu terlihat menarik tetapi cukup berat untuk diterapkan.
ℝaphink
Itu untuk crontab 1200-line yang saya gunakan ... tapi ya, sangat berat. Saya ingin melihat sesuatu yang lebih ringan juga.
ewwhite
2

Semacam kerangka kerja untuk menetapkan ID unik untuk setiap tugas cron dan menghubungkannya dalam file log, dan / atau masuk ke lokasi tertentu untuk merekam informasi runtime (sebagai lawan dari log output normal). Ini tidak akan sepele namun Anda mendesainnya, tetapi untuk sistem kecil mudah untuk melihat ini dari melihat crontab dan file log Anda.

Saya menganggap Anda tidak berbicara tentang sistem kecil.

adaptr
sumber
Saya suka ide ini dan itu bisa relatif mudah diimplementasikan dalam cron itu sendiri daripada bungkus / kerangka kerja. Cukup md5umkan baris crontab untuk pengidentifikasi unik dan lacak SIGCHILD untuk mencatat waktu berhenti.
Mark Wagner
0

Sebuah skrip untuk mencetak semua tugas sistem yang diurutkan berdasarkan waktu

#!/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}"
stefcud
sumber