Crontabs analiz ve optimize [kapalı]


9

Crontab yürütmesini grafikleştirmek, analiz etmek ve optimize etmek için bir araç var mı?

Açıklığa kavuşturmak için, cron işleri yürütüldüğünde bir grafik oluşturacak ve sysadmin'in bunları akıllıca yeniden düzenlemesine yardımcı olacak bir araç düşünüyorum.


1
Kafamın üstünden bir şey düşünemiyorum, ama yarın Pazartesi günü Banka Tatili, bu yüzden bir tane yazabilirim.
Tom O'Connor

Yanıtlar:


4

Yaptığım tek şey, bağımlılıkları grafiklendirmek ve efekt kesintileri pencerelerinde görünürlük elde etmek için cron işlerini yapılandırılmış bir iş zamanlayıcıya taşımaktır.


Bu ilginç görünüyor ama uygulanması oldukça ağır.
inkaphink

Kullandığım 1200 satırlık bir crontab içindi ... ama evet, çok ağır. Ben de daha hafif bir şey görmek istiyorum.
ewwhite

2

Her bir cron işine benzersiz bir kimlik atamak ve günlük dosya (lar) ında bunu ilişkilendirmek ve / veya çalışma zamanı bilgilerini (normal çıktı günlüğünün aksine) kaydetmek için belirli bir konuma giriş yapmak için bir tür çerçeve. Tasarladığınız halde önemsiz olmayacaktır, ancak küçük sistemler için bunu crontabs'larınıza ve günlük dosyalarınıza bakmaktan göz atmak kolaydır.

Yine de küçük sistemlerden bahsetmediğinizi düşünüyorum.


Bu fikri seviyorum ve bir sargı / çerçeve yerine cronun kendisinde nispeten kolayca uygulanabilir. Sadece benzersiz tanımlayıcı için crontab satırını md5sum ve durma zamanlarını günlüğe kaydetmek için SIGCHILD'i izleyin.
Mark Wagner


0

Zamana göre sıralanmış tüm sistem görevlerini yazdırmak için bir komut dosyası

#!/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}"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.