Pertanyaan Analisis dan optimalkan crontab [tertutup]


Apakah ada alat untuk membuat grafik, menganalisis, dan membantu mengoptimalkan pelaksanaan crontab?

Untuk memperjelas, saya berpikir tentang alat yang akan menghasilkan grafik ketika pekerjaan cron dijalankan, dan membantu sysadmin mereorganisasi mereka dengan cerdas.


8
2017-11-28 13:11




Saya tidak bisa memikirkan apa pun dari atas kepala saya, tetapi hari libur Bank Senin besok, jadi saya bisa menuliskannya. - Tom O'Connor


Jawaban:


Satu-satunya hal yang saya lakukan adalah memindahkan cron job ke dalam penjadwalan pekerjaan terstruktur untuk membuat grafik dependensi dan mendapatkan visibilitas ke dalam efek jendela downtime.


4
2017-11-28 13:32



Itu terlihat menarik tetapi cukup berat untuk diterapkan. - ℝaphink
Itu untuk crontab 1200-line yang saya gunakan ... tapi ya, sangat berat. Saya ingin melihat sesuatu yang lebih ringan juga. - ewwhite


Semacam kerangka kerja untuk menetapkan ID unik untuk setiap tugas cron dan berkorelasi bahwa dalam file log (s), dan / atau masuk ke lokasi tertentu untuk mencatat informasi runtime (sebagai lawan dari log output normal). Ini tidak akan sepele tetapi Anda merancangnya, tetapi untuk sistem kecil mudah untuk melihat hal ini dari melihat crontab dan file log Anda.

Saya berasumsi Anda tidak berbicara tentang sistem kecil.


2
2017-11-28 13:48



Saya suka ide ini dan itu bisa relatif mudah diimplementasikan dalam cron itu sendiri daripada pembungkus / kerangka. Cukup md5sum baris crontab untuk pengenal unik dan lacak SIGCHILD untuk mencatat waktu berhenti. - Mark Wagner


Kedengarannya seperti ini adalah fungsi yang Anda inginkan http://www.phpclasses.org/package/6673-PHP-Parse-crontab-schedule-and-generate-Gantt-charts.html

Saya tidak dapat menjamin hal di atas, itu hanya hasil dari beberapa pencarian web.


2
2018-04-02 23:24





Skrip untuk mencetak semua tugas sistem yang diurutkan berdasarkan waktu

#!/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}"

0
2018-02-04 01:49