• Script kiểm tra tất cả các cron jobs của tất cả các user trên Ubuntu, Debian, Centos, Linux Mint ...

  • Các Bài Viết Hay, Sưu Tầm Hoặc Hỏi Đáp Về Sử Dụng VPS & Hosting

Các Bài Viết Hay, Sưu Tầm Hoặc Hỏi Đáp Về Sử Dụng VPS & Hosting
 #166  by nguyenoanh
 07 Jun 2018 13:59
Dưới đây là một Script mình sưu tầm được trên mạng, script này sẽ check và show tất cả các cronjob đang chạy của tất cả các user trên máy tính của bạn. Script hỗ trợ Debian, họ nhà Debian như Ubuntu, Linux Mint, Red hat và họ nhà hắn như Centos ... .

Để script này chạy được, trước tiên bạn cần tạo một file checkcron.sh có nội dung như sau:
Code: Select all
#!/bin/bash

# System-wide crontab file and cron job directory. Change these for your system.
CRONTAB='/etc/crontab'
CRONDIR='/etc/cron.d'

# Single tab character. Annoyingly necessary.
tab=$(echo -en "\t")

# Given a stream of crontab lines, exclude non-cron job lines, replace
# whitespace characters with a single space, and remove any spaces from the
# beginning of each line.
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;
}

# Given a stream of cleaned crontab lines, echo any that don't include the
# run-parts command, and for those that do, show each job file in the run-parts
# directory as if it were scheduled explicitly.
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;
}

# Temporary file for crontab lines.
temp=$(mktemp) || exit 1

# Add all of the jobs from the system-wide crontab file.
cat "${CRONTAB}" | clean_cron_lines | lookup_run_parts >"${temp}" 

# Add all of the jobs from the system-wide cron directory.
cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>

# Add each user's crontab (if it exists). Insert the user's name between the
# five time fields and the command.
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)

# Output the collected crontab lines. Replace the single spaces between the
# fields with tab characters, sort the lines by hour and minute, insert the
# header line, and format the results as a table.
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,1 |
    sed "1i\mi\th\td\tm\tw\tuser\tcommand" |
    column -s"${tab}" -t

rm --force "${temp}"
Tiếp theo ta phải chmod để cho script có quyền chạy.
Code: Select all
chmod +x /home/nguyenoanh/checkcron.sh
Bây giờ ta có thể chạy được script rồi.
Code: Select all
 sh  /home/nguyenoanh/checkcron.sh 
hoặc nếu ta đã cd tới thư mục chứa script thì chỉ cần chạy lệnh
Code: Select all
./checkcron.sh
Kết quả:
Code: Select all
mi  h  d  m  w  user  command
25  6  *  *  *  root  /etc/cron.daily/0anacron
25  6  *  *  *  root  /etc/cron.daily/apport
25  6  *  *  *  root  /etc/cron.daily/apt-compat
25  6  *  *  *  root  /etc/cron.daily/aptitude
25  6  *  *  *  root  /etc/cron.daily/bsdmainutils
25  6  *  *  *  root  /etc/cron.daily/cracklib-runtime
25  6  *  *  *  root  /etc/cron.daily/dpkg
25  6  *  *  *  root  /etc/cron.daily/google-chrome
25  6  *  *  *  root  /etc/cron.daily/logrotate
25  6  *  *  *  root  /etc/cron.daily/man-db
25  6  *  *  *  root  /etc/cron.daily/mlocate
25  6  *  *  *  root  /etc/cron.daily/ntp
25  6  *  *  *  root  /etc/cron.daily/passwd
25  6  *  *  *  root  /etc/cron.daily/upstart
30  7  *  *  *  root  test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null
47  6  *  *  7  root  /etc/cron.weekly/0anacron
47  6  *  *  7  root  /etc/cron.weekly/apt-xapian-index
47  6  *  *  7  root  /etc/cron.weekly/fstrim
47  6  *  *  7  root  /etc/cron.weekly/man-db
52  6  1  *  *  root  /etc/cron.monthly/0anacron
Get 25 USD Free To USE VPSSIM