Crontabs analysieren und optimieren [geschlossen]

9

Gibt es ein Tool zum Zeichnen, Analysieren und Optimieren der Crontab-Ausführung?

Zur Verdeutlichung denke ich an ein Tool, das ein Diagramm darüber erstellt, wann Cron-Jobs ausgeführt werden, und dem Systemadministrator hilft, sie intelligent zu reorganisieren.

ℝaphink
quelle
1
Ich kann mir nichts aus dem Kopf denken, aber morgen ist Bankfeiertag, also könnte ich versuchen, eins zu schreiben.
Tom O'Connor

Antworten:

4

Das einzige, was ich getan habe, ist, Cron-Jobs in einen strukturierten Job-Scheduler zu verschieben, um Abhängigkeiten grafisch darzustellen und Einblick in die Ausfallzeitfenster der Effekte zu erhalten.

ewwhite
quelle
Das sieht interessant aus, ist aber ziemlich schwer umzusetzen.
inkaphink
Es war für eine Crontab mit 1200 Linien, die ich benutzte ... aber ja, sehr schwer. Ich würde auch gerne etwas Leichteres sehen.
ewwhite
2

Eine Art Framework, um jedem Cron-Job eine eindeutige ID zuzuweisen und diese in den Protokolldateien zu korrelieren und / oder an einem bestimmten Speicherort zu protokollieren, um Laufzeitinformationen aufzuzeichnen (im Gegensatz zum normalen Ausgabeprotokoll). Es wird nicht trivial sein, wie auch immer Sie es entwerfen, aber für kleine Systeme ist es einfach, dies zu betrachten, wenn Sie sich Ihre Crontabs und Protokolldateien ansehen.

Ich nehme an, Sie sprechen jedoch nicht über kleine Systeme.

adaptr
quelle
Ich mag diese Idee und sie könnte relativ einfach in cron selbst implementiert werden, anstatt in einem Wrapper / Framework. Summen Sie einfach die crontab-Zeile für die eindeutige Kennung und verfolgen Sie SIGCHILD, um die Stoppzeiten zu protokollieren.
Mark Wagner
0

Ein Skript zum Drucken aller Systemaufgaben, sortiert nach Zeit

#!/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
quelle