Analizza e ottimizza i crontab [chiuso]


9

Esiste uno strumento per rappresentare graficamente, analizzare e aiutare a ottimizzare l'esecuzione di crontab?

Per chiarire, sto pensando a uno strumento che genererebbe un grafico di quando vengono eseguiti i lavori cron e aiuterebbe l'amministratore di sistema a riorganizzarli in modo intelligente.


1
Non riesco a pensare a niente di straordinario, ma domani è festivo lunedì, quindi potrei provare a scriverne uno.
Tom O'Connor,

Risposte:


4

L'unica cosa che ho fatto è spostare i lavori cron in uno scheduler di lavori strutturato per rappresentare graficamente le dipendenze e ottenere visibilità nelle finestre dei tempi di inattività degli effetti.


Sembra interessante ma abbastanza pesante da implementare.
inkaphink,

Stavo usando un crontab di 1200 linee che stavo usando ... ma sì, molto pesante. Mi piacerebbe vedere anche qualcosa di più leggero.
ewwhite,

2

Una sorta di framework per assegnare un ID univoco a ciascun processo cron e correlarlo nei file di registro e / o accedere a una posizione specifica per registrare le informazioni di runtime (al contrario del normale registro di output). Non sarà banale, qualunque sia il progetto, ma per i piccoli sistemi è facile osservarlo guardando i tuoi crontab e file di registro.

Presumo che tu non stia parlando di piccoli sistemi.


Mi piace questa idea e potrebbe essere relativamente facilmente implementata in cron stesso piuttosto che in un wrapper / framework. Basta md5sum la linea crontab per l'identificatore univoco e tenere traccia di SIGCHILD per registrare i tempi di arresto.
Mark Wagner,


0

Uno script per stampare tutte le attività di sistema ordinate per ora

#!/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}"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.