Crontabs का विश्लेषण और अनुकूलन [बंद]


9

क्या Crontab निष्पादन को अनुकूलित करने के लिए ग्राफ़ का विश्लेषण, विश्लेषण और मदद करना है?

स्पष्ट करने के लिए, मैं एक ऐसे उपकरण के बारे में सोच रहा हूं, जो क्रोन नौकरियों के क्रियान्वयन के समय का एक ग्राफ उत्पन्न करेगा, और sysadmin को स्मार्ट तरीके से पुनर्गठित करने में मदद करेगा।


1
मैं अपने सिर के ऊपर से कुछ भी नहीं सोच सकता, लेकिन यह कल बैंक हॉलिडे है, इसलिए मुझे एक लिखने पर जाना पड़ सकता है।
टॉम ओ'कॉनर

जवाबों:


4

केवल एक चीज जो मैंने की है, क्रोन नौकरियों को संरचित नौकरी अनुसूचक में ग्राफ निर्भरता के क्रम में और प्रभाव डाउनटाइम खिड़कियों में दृश्यता प्राप्त करने के लिए स्थानांतरित किया है ।


यह दिलचस्प लग रहा है लेकिन लागू करने के लिए काफी भारी है।
.एफ़िंक

यह एक 1200-लाइन crontab मैं उपयोग कर रहा था के लिए था ... लेकिन हां, बहुत भारी। मैं कुछ हल्का वजन भी देखना चाहते हैं।
इविविट

2

प्रत्येक क्रोन नौकरी के लिए एक अद्वितीय आईडी असाइन करने के लिए कुछ प्रकार की रूपरेखा और लॉग फ़ाइल (रों), और / या रनटाइम जानकारी (सामान्य आउटपुट लॉग के विपरीत) दर्ज करने के लिए एक विशिष्ट स्थान पर लॉग इन करने के लिए सहसंबंधी। यह तुच्छ होने वाला नहीं है, हालांकि आप इसे डिज़ाइन करते हैं, लेकिन छोटे सिस्टमों के लिए इसे अपने कॉन्टैब्स और लॉग फ़ाइलों को देखने से रोकना आसान है।

मुझे लगता है कि आप छोटे सिस्टम के बारे में बात नहीं कर रहे हैं, हालांकि।


मुझे यह विचार पसंद है और इसे रैपर / फ्रेमवर्क के बजाय क्रोन में ही आसानी से लागू किया जा सकता है। अद्वितीय पहचानकर्ता के लिए कॉन्टैब लाइन को md5sum करें और स्टॉप टाइम लॉग करने के लिए 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.