Аналіз та оптимізація кронтових вкладок [закрито]


9

Чи є інструмент для графіки, аналізу та сприяння оптимізації виконання crontab?

Для уточнення, я думаю про інструмент, який би створив графік, коли виконуються завдання Cron, і допоможе систематичному реорганізувати їх.


1
Я не можу придумати що-небудь у верхній частині моєї голови, але завтра в понеділок є свято Банку, тому я міг би списатись.
Том О'Коннор

Відповіді:


4

Єдине, що я зробив, - це перемістити завдання cron в структурований планувальник завдань , щоб графік залежностей та отримання видимості у вікнах простоїв ефектів.


Це виглядає цікаво, але досить важко втілити.
phaphink

Це було для лінійки на 1200 ліній, яку я використовував ... але так, дуже важко. Я також хотів би побачити щось легше.
ewwhite

2

Якийсь тип рамки для призначення унікального ідентифікатора кожному завданням cron і співвіднесення цього у файлах (-ів) журналу та / або вході в певне місце для запису інформації часу виконання (на відміну від звичайного журналу виводу). Однак це не буде тривіально, але ви спроектуєте це, але для невеликих систем це легко зав'язати, переглянувши свої файли crontabs та log.

Я припускаю, що ти не говориш про малі системи.


Мені подобається ця ідея, і вона може бути відносно легко реалізована в самому кроні, а не в обгортці / рамці. Просто введіть md5sum лінію crontab для унікального ідентифікатора і відстежте SIGCHILD для реєстрації часу зупинки.
Марк Вагнер


0

Сценарій для друку всіх системних завдань, відсортованих за часом

#!/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}"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.