크론 탭 분석 및 최적화 [닫기]


9

crontab 실행을 그래프, 분석 및 최적화하는 도구가 있습니까?

명확히하기 위해 cron 작업이 실행될 때의 그래프를 생성하고 sysadmin이 현명하게 재구성하는 데 도움이되는 도구를 생각하고 있습니다.


1
내 머리 꼭대기에서 아무것도 생각할 수 없지만 내일은 은행 휴일 월요일이므로 글을 쓸 수 있습니다.
Tom O'Connor

답변:


4

내가 한 유일한 일은 종속성을 그래프로 표시하고 효과 중단 시간 창에 대한 가시성을 얻기 위해 cron 작업을 구조화 된 작업 스케줄러 로 옮기는 것입니다 .


그것은 흥미롭지 만 구현하기에는 상당히 무겁습니다.
ℝaphink

내가 사용했던 1200 줄 crontab이었습니다 ... 그렇습니다. 매우 무겁습니다. 더 가벼운 것을보고 싶습니다.
ewwhite

2

각 cron 작업에 고유 한 ID를 할당하고 로그 파일의 고유 ID를 연관 시키거나 런타임 정보를 기록하기 위해 특정 위치에 로깅하는 일반 프레임 워크와 달리 일종의 프레임 워크. 비록 당신이 그것을 디자인하는 것은 사소한 것이 아니지만, 작은 시스템의 경우 crontabs와 로그 파일을 보면 쉽게 알 수 있습니다.

그래도 작은 시스템에 대해 이야기하고 있지 않다고 가정합니다.


나는이 아이디어를 좋아하며 래퍼 / 프레임 워크 대신 cron 자체에서 비교적 쉽게 구현할 수 있습니다. 고유 식별자에 대한 crontab 행을 md5sum으로 지정하고 SIGCHILD를 추적하여 중지 시간을 기록하십시오.
Mark Wagner


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}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.