Analizar y optimizar crontabs [cerrado]

9

¿Existe una herramienta para graficar, analizar y ayudar a optimizar la ejecución de crontab?

Para aclarar, estoy pensando en una herramienta que generaría un gráfico de cuándo se ejecutan los trabajos cron y ayudaría al administrador del sistema a reorganizarlos de manera inteligente.

Phaphink
fuente
1
No puedo pensar en nada fuera de mi cabeza, pero es lunes festivo mañana, así que podría intentar escribir uno.
Tom O'Connor

Respuestas:

4

Lo único que he hecho es mover los trabajos cron a un planificador de trabajos estructurado para graficar las dependencias y obtener visibilidad en las ventanas de tiempo de inactividad de los efectos.

ewwhite
fuente
Eso parece interesante pero bastante pesado de implementar.
phaphink
Fue para un crontab de 1200 líneas que estaba usando ... pero sí, muy pesado. Me gustaría ver algo más liviano también.
ewwhite
2

Algún tipo de marco para asignar una ID única a cada trabajo cron y correlacionar eso en los archivos de registro, y / o iniciar sesión en una ubicación específica para registrar información de tiempo de ejecución (en oposición al registro de salida normal). Sin embargo, no será trivial como lo diseñe, pero para sistemas pequeños es fácil observar esto mirando sus crontabs y archivos de registro.

Sin embargo, supongo que no estás hablando de sistemas pequeños.

Adaptador
fuente
Me gusta esta idea y podría implementarse con relativa facilidad en el cron en lugar de un contenedor / framework. Simplemente md5sum la línea crontab para el identificador único y rastree SIGCHILD para registrar los tiempos de parada.
Mark Wagner el
0

Un script para imprimir todas las tareas del sistema ordenadas por hora

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