ฉันจะแสดงรายการงาน cron ทั้งหมดสำหรับผู้ใช้ทั้งหมดได้อย่างไร


857

มีคำสั่งหรือสคริปต์ที่มีอยู่ที่จะให้ฉันดูงาน cron ตามกำหนดเวลาทั้งหมดของระบบ * NIX พร้อมกันหรือไม่ ฉันต้องการให้รวม crontabs ของผู้ใช้ทั้งหมดรวมถึง/etc/crontabและสิ่งที่อยู่ใน/etc/cron.dนั้น นอกจากนี้ยังจะดีที่จะเห็นคำสั่งเฉพาะที่ดำเนินการโดยในrun-parts/etc/crontab

โดยหลักการแล้วฉันต้องการเอาต์พุตในรูปแบบคอลัมน์ที่ดีและเรียงลำดับอย่างมีความหมาย

ฉันสามารถรวมรายชื่อเหล่านี้จากหลายเซิร์ฟเวอร์เพื่อดู "กำหนดการของกิจกรรม" โดยรวม

ฉันกำลังจะเขียนสคริปต์เช่นนี้ด้วยตัวเอง แต่ถ้าใครบางคนไปแล้วปัญหา ...


2
คำถามที่คล้ายกันใน Unix SE: unix.stackexchange.com/questions/7053/…
maxschlepzig

คำตอบ:


1134

คุณจะต้องเรียกใช้สิ่งนี้ในฐานะ root แต่:

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

จะวนซ้ำชื่อผู้ใช้แต่ละรายชื่อออกจาก crontab crontab นั้นเป็นของผู้ใช้ที่เกี่ยวข้องดังนั้นคุณจะไม่สามารถเห็น crontab ของผู้ใช้รายอื่นที่ไม่มีพวกเขาหรือรูท


แก้ไข หากคุณต้องการทราบว่าเป็น crontab ของผู้ใช้ใดให้ใช้echo $user

for user in $(cut -f1 -d: /etc/passwd); do echo $user; crontab -u $user -l; done

53
ไม่ทำงานเมื่อผู้ใช้ถูกกำหนดใน NIS หรือ LDAP คุณต้องใช้for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
Hubert Kario

9
อัปเดตสิ่งนี้เพื่อแยกความคิดเห็นและระงับข้อความ 'no crontab สำหรับผู้ใช้ ... ':for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
โจนาธาน

38
การดูไฟล์ใน / var / spool / cron จะง่ายกว่าไหม
graywh

2
เราต้องเปลี่ยน LDAP และ / etc / passwd ด้วยคำสั่ง getent:for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
Toby Batch

9
สิ่งที่เกี่ยวกับ cronjobs ใน/etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/... ?
Abdull

309

ฉันสิ้นสุดการเขียนสคริปต์ (ฉันพยายามที่จะสอนตัวเองในจุดที่ดีที่สุดของการทุบตีสคริปต์ดังนั้นนั่นเป็นเหตุผลที่คุณไม่เห็นอะไรอย่าง Perl ที่นี่) มันไม่ได้เป็นเรื่องง่าย ๆ แต่ก็ทำสิ่งที่ฉันต้องการมากที่สุด จะใช้ข้อเสนอแนะของไคล์สำหรับการหาค่า crontabs ผู้ใช้แต่ละคน แต่ยังเกี่ยวข้องกับ/etc/crontab(รวมทั้งสคริปต์เปิดตัวโดยrun-partsใน/etc/cron.hourly, /etc/cron.dailyฯลฯ ) และการจ้างงานใน/etc/cron.dไดเรกทอรี ใช้ทั้งหมดและรวมเข้ากับสิ่งที่แสดงดังต่อไปนี้:

mi     h    d  m  w  user      command
09,39  *    *  *  *  root      [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm
47     */8  *  *  *  root      rsync -axE --delete --ignore-errors / /mirror/ >/dev/null
17     1    *  *  *  root      /etc/cron.daily/apt
17     1    *  *  *  root      /etc/cron.daily/aptitude
17     1    *  *  *  root      /etc/cron.daily/find
17     1    *  *  *  root      /etc/cron.daily/logrotate
17     1    *  *  *  root      /etc/cron.daily/man-db
17     1    *  *  *  root      /etc/cron.daily/ntp
17     1    *  *  *  root      /etc/cron.daily/standard
17     1    *  *  *  root      /etc/cron.daily/sysklogd
27     2    *  *  7  root      /etc/cron.weekly/man-db
27     2    *  *  7  root      /etc/cron.weekly/sysklogd
13     3    *  *  *  archiver  /usr/local/bin/offsite-backup 2>&1
32     3    1  *  *  root      /etc/cron.monthly/standard
36     4    *  *  *  yukon     /home/yukon/bin/do-daily-stuff
5      5    *  *  *  archiver  /usr/local/bin/update-logs >/dev/null

โปรดทราบว่ามันจะแสดงผู้ใช้และเรียงลำดับมากขึ้นหรือน้อยลงตามชั่วโมงและนาทีเพื่อให้ฉันสามารถดูตารางประจำวัน

จนถึงตอนนี้ฉันได้ทดสอบกับ Ubuntu, Debian และ Red Hat AS แล้ว

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

38
ไม่มีอะไร แต่มันไม่ได้ทำอะไรเกี่ยวกับงาน cron ของระบบใน / etc / crontab และ /etc/cron.d/ การจัดการกับสิ่งเหล่านั้นและการจัดรูปแบบทุกอย่างในตอนท้ายคือสิ่งที่สคริปต์ของฉันทำ
yukondude

10
yukondude - คุณควรพิจารณานำ github นี้ไปใช้แม้เป็นส่วนสำคัญ
Kyle Burton

3
พยายามคัดลอกวางและเรียกใช้ แต่ล้มเหลว: showcrons.sh: บรรทัด 59: ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด <' showcrons.sh: line 59: ทำ <<(ตัด - ฟิลด์ = 1 - วัน = = / / / passwd) '
Fraggle

2
@KyleBurton ดูเหมือนมีอย่างน้อย 8 gists คัดลอกนี้แล้ว gist.github.com/gists/ …
Zitrax

9
คำเตือน: สคริปต์นี้ไม่มีกิจกรรมจาก/etc/anacrontab
ck_

191

ภายใต้ Ubuntu หรือ debian คุณสามารถดู crontab จาก/var/spool/cron/crontabs/นั้นมีไฟล์สำหรับผู้ใช้แต่ละคนอยู่ในนั้น นั่นเป็นเพียงสำหรับ crontab เฉพาะของผู้ใช้แน่นอน

สำหรับ Redhat 6/7 และ Centos, crontab /var/spool/cron/ที่อยู่ภายใต้


7
วิธีนี้ใช้ได้กับ RedHat เช่นกัน (/ var / spool / cron) และง่ายกว่าการเขียน / เรียกใช้สคริปต์โดยเฉพาะถ้าคุณใช้ Ldap เพื่อจัดการบัญชี +1
user49913

6
สิ่งนี้มีประโยชน์กับฉันมากกว่าคำตอบอื่น ๆ วิธีนี้ช่วยให้คุณดู crontabs ของผู้ใช้ที่ไม่มีอยู่อีกต่อไปให้งาน cron ทั้งหมดตามที่ร้องขอโดย OP
Andrew Ensley

1
ข้อดีอีกประการของวิธีนี้: เซิร์ฟเวอร์ของฉันใช้ LDAP ดังนั้นผู้ใช้ส่วนใหญ่จึงไม่ได้เข้า/etc/passwdใช้ IMO นี้ควรเป็นคำตอบที่ได้รับการยอมรับมากกว่าโซลูชันที่ใช้กำลังดุร้ายทั้งหมด
Mikkel

1
ดีกับ Suse Linux ที่นี่
Bret

ขอบคุณนี่เป็นความจริงสำหรับ AWS EC2 instace ข้อมูลนี้มีประโยชน์มาก!
Ivan Marjanovic

34

นี่จะแสดงรายการ crontab ทั้งหมดจากผู้ใช้ทั้งหมด

sed 's/^\([^:]*\):.*$/crontab -u \1 -l 2>\&1/' /etc/passwd | grep -v "no crontab for" | sh

30

ขึ้นอยู่กับรุ่น linux ของคุณ แต่ฉันใช้:

tail -n 1000 /var/spool/cron/*

ในฐานะที่เป็นราก ง่ายมากและสั้นมาก

ให้ผลลัพธ์เช่น:

==> /var/spool/cron/root <==
15 2 * * * /bla

==> /var/spool/cron/my_user <==
*/10 1 * * * /path/to/script

4
ใช้tail -n +1 /var/spool/cron/*เพื่อแสดงรายการเนื้อหาทั้งหมดของไฟล์
Hans Ginzel

4
... หรือsudo sh -c 'tail -n +1 /var/spool/cron/*'หากคุณไม่ต้องการเป็นรูต OCD ของฉันบังคับให้ฉันตรวจสอบว่าทำไมฉันไม่สามารถ sudo คำสั่งนี้เป็นลายลักษณ์อักษร เป็นเพราะผู้ใช้ทั่วไปไม่สามารถเข้าถึง / var / spool / cron dir และ glob ถูกตีความว่าเป็นตัวอักษรดาวที่แท้จริงซึ่งเห็นได้ชัดว่าไม่มีอยู่
เดลเดอร์สัน

หรือcd /var/spool/cron/cron/ && grep . *จะพิมพ์ชื่อผู้ใช้ที่เกี่ยวข้องต่อหน้าทุกงาน cron ด้วย
Jakub Kukul

15

การปรับแต่งเล็ก ๆ ของคำตอบของ Kyle Burton พร้อมการจัดรูปแบบเอาต์พุตที่ดีขึ้น:

#!/bin/bash
for user in $(cut -f1 -d: /etc/passwd)
do echo $user && crontab -u $user -l
echo " "
done


14
getent passwd | cut -d: -f1 | perl -e'while(<>){chomp;$l = `crontab -u $_ -l 2>/dev/null`;print "$_\n$l\n" if $l}'

วิธีนี้จะหลีกเลี่ยงการสับสนกับรหัสผ่านโดยตรงข้ามผู้ใช้ที่ไม่มีรายการ cron และสำหรับผู้ที่มีพวกเขามันจะพิมพ์ชื่อผู้ใช้เช่นเดียวกับ crontab ของพวกเขา

ส่วนใหญ่จะวางที่นี่ แต่ฉันสามารถหาได้ในภายหลังในกรณีที่ฉันต้องการค้นหาอีกครั้ง


1
นอกจากนี้ยังแสดงรายการผู้ใช้ LDAP ที่ไม่ได้อยู่/etc/passwdด้วย วิธีการแก้ปัญหาของแมตต์ข้างต้นมีความเหมาะสมกับสถานการณ์เฉพาะมากกว่านี้ แต่ก็ดีที่จะรู้ว่าคำสั่งนั้นมีอยู่
Mikkel

11

หากคุณตรวจสอบคลัสเตอร์โดยใช้ NIS วิธีเดียวที่จะดูว่าผู้ใช้มีรายการ crontab เป็นไปตาม answer / var / spool / cron / tab ของ Matt หรือไม่

grep -v "#" -R  /var/spool/cron/tabs


10

สคริปต์นี้ทำงานให้ฉันใน CentOS เพื่อแสดงรายการ crons ทั้งหมดในสภาพแวดล้อม:

sudo cat /etc/passwd | sed 's/^\([^:]*\):.*$/sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh

2
! น่ากลัว ฉันได้เพิ่มการเปลี่ยนแปลงเล็กน้อยเพื่อดูว่างาน cron อยู่ภายใต้ผู้ใช้ใดและวางช่องว่างระหว่างผลลัพธ์: cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | shประหยัดเวลาเล็กน้อย
jamil

9

ฉันชอบคำตอบเดียวที่เรียบง่ายด้านบน:

สำหรับผู้ใช้ใน $ (ตัด -f1 -d: / etc / passwd); ทำ crontab -u $ user -l; เสร็จแล้ว

แต่ Solaris ที่ไม่มีแฟล็ก -u และไม่พิมพ์ผู้ใช้ที่กำลังตรวจสอบคุณสามารถแก้ไขได้เช่น:

for user in $(cut -f1 -d: /etc/passwd); do echo User:$user; crontab -l $user 2>&1 | grep -v crontab; done

คุณจะได้รับรายชื่อผู้ใช้ที่ไม่มีข้อผิดพลาดจาก crontab เมื่อบัญชีไม่ได้รับอนุญาตให้ใช้ cron เป็นต้นโปรดทราบว่าใน Solaris บทบาทอาจอยู่ใน / etc / passwd ด้วยเช่นกัน (ดู / etc / user_attr)



เย็น. จะไม่ใช้
squarism


7

แถบต่อไปนี้ตัดความคิดเห็นบรรทัดว่างและข้อผิดพลาดจากผู้ใช้ที่ไม่มี crontab สิ่งที่คุณเหลืออยู่คือรายชื่อผู้ใช้และงานที่ชัดเจน

สังเกตการใช้งานsudoในบรรทัดที่ 2 หากคุณรูทแล้วให้ลบออก

for USER in $(cut -f1 -d: /etc/passwd); do \
USERTAB="$(sudo crontab -u "$USER" -l 2>&1)";  \
FILTERED="$(echo "$USERTAB"| grep -vE '^#|^$|no crontab for|cannot use this program')";  \
if ! test -z "$FILTERED"; then  \
echo "# ------ $(tput bold)$USER$(tput sgr0) ------";  \
echo "$FILTERED";  \
echo "";  \
fi;  \
done

ตัวอย่างผลลัพธ์:

# ------ root ------
0 */6 * * * /usr/local/bin/disk-space-notify.sh
45 3 * * * /opt/mysql-backups/mysql-backups.sh
5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade

# ------ sammy ------
55 * * * * wget -O - -q -t 1 https://www.example.com/cron.php > /dev/null

ฉันใช้สิ่งนี้บน Ubuntu (12 ถึง 16) และ Red Hat (5 ถึง 7)


5

ขึ้นอยู่กับรุ่น cron ของคุณ การใช้ Vixie cron บน FreeBSD ฉันสามารถทำสิ่งนี้:

(cd /var/cron/tabs && grep -vH ^# *) 

หากฉันต้องการให้แท็บอื่นถูกพิจารณาผิดมากขึ้นฉันอาจทำสิ่งนี้:

(cd /var/cron/tabs && grep -vH ^# * | sed "s/:/      /")

ที่นั่นเป็นแท็บตัวอักษรในส่วนการแทนที่ sed

อาจเป็นอิสระจากระบบมากขึ้นในการวนลูปผ่านผู้ใช้ใน/etc/passwdและทำcrontab -l -u $userสำหรับแต่ละคน


4

ขอบคุณสำหรับสคริปต์ที่มีประโยชน์มากนี้ ฉันมีปัญหาเล็ก ๆ บางอย่างที่รันบนระบบเก่า (Red Hat Enterprise 3 ซึ่งจัดการ egrep และแท็บในสตริงที่แตกต่างกัน) และระบบอื่น ๆ ที่ไม่มีอะไรใน /etc/cron.d/ (สคริปต์ก็จบลงด้วยข้อผิดพลาด) ดังนั้นนี่คือแพทช์เพื่อให้ทำงานในกรณีดังกล่าว:

2a3,4
> #See:  http://stackoverflow.com/questions/134906/how-do-i-list-all-cron-jobs-for-all-users
>
27c29,30
<         match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
---
>         #match=$(echo "${line}" | egrep -o 'run-parts (-{1,2}\S+ )*\S+')
>         match=$(echo "${line}" | egrep -o 'run-parts.*')
51c54,57
< cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>
---
> sys_cron_num=$(ls /etc/cron.d | wc -l | awk '{print $1}')
> if [ "$sys_cron_num" != 0 ]; then
>       cat "${CRONDIR}"/* | clean_cron_lines >>"${temp}"  # */ <not a comment>
> fi
67c73
<     sed "1i\mi\th\td\tm\tw\tuser\tcommand" |
---
>     sed "1i\mi${tab}h${tab}d${tab}m${tab}w${tab}user${tab}command" |

ฉันไม่แน่ใจจริงๆว่าการเปลี่ยนแปลงใน egrep แรกเป็นความคิดที่ดี แต่สคริปต์นี้ได้รับการทดสอบใน RHEL3,4,5 และ Debian5 โดยไม่มีปัญหาใด ๆ หวังว่านี่จะช่วยได้!


3

อาคารด้านบนของ @Kyle

for user in $(tail -n +11 /etc/passwd | cut -f1 -d:); do echo $user; crontab -u $user -l; done

เพื่อหลีกเลี่ยงความคิดเห็นมักจะอยู่ด้านบนของ / etc / passwd

และบน macosx

for user in $(dscl . -list /users | cut -f1 -d:); do echo $user; crontab -u $user -l; done    

3
คุณไม่ควรgrep -v '^#แทนที่จะพึ่งพาเลขเวทมนต์11ใช่ไหม
rr-

1
Red Hat / CentOS distros ไม่ได้เขียนคำแนะนำที่เป็นประโยชน์ในช่วงเริ่มต้นของ crontab ของผู้ใช้ดังนั้นการตัด 11 บรรทัดแรกจะทำให้เนื้อหาของมันหายไป สิ่งเดียวกันถ้าผู้ใช้ Ubuntu ได้แก้ไข crontab ของตนเองและลบการถือครองทั้งหมด
Dale Anderson


3

ฉันคิดว่าหนึ่งซับที่ดีกว่าจะอยู่ด้านล่าง ตัวอย่างเช่นถ้าคุณมีผู้ใช้ใน NIS หรือ LDAP พวกเขาจะไม่อยู่ใน / etc / passwd สิ่งนี้จะให้ crontabs ของผู้ใช้ทุกคนที่เข้าสู่ระบบ

for I in `lastlog | grep -v Never | cut -f1 -d' '`; do echo $I ; crontab -l -u $I ; done


3

คุณสามารถเขียนสำหรับรายชื่อผู้ใช้ทั้งหมด:

sudo crontab -u userName -l

,

คุณยังสามารถไปที่

cd /etc/cron.daily/
ls -l
cat filename

ไฟล์นี้จะแสดงรายการตารางเวลา

cd /etc/cron.d/
ls -l
cat filename

3

ด้วยคำขอโทษและขอบคุณ yukondude

ฉันพยายามสรุปการตั้งค่าเวลาเพื่อให้อ่านง่ายแม้ว่าจะไม่ใช่งานที่สมบูรณ์แบบและฉันก็ไม่ได้แตะ 'ทุกวันศุกร์' หรือ 'เฉพาะวันจันทร์'

นี่คือรุ่น 10 - ตอนนี้:

  • ทำงานเร็วขึ้นมาก
  • มีตัวเลือกความคืบหน้าเพิ่มเติมเพื่อให้คุณสามารถเพิ่มความเร็วได้อีก
  • ใช้เส้นแบ่งเพื่อแยกส่วนหัวและเอาท์พุท
  • เอาท์พุทในรูปแบบกะทัดรัดเมื่อทุกช่วงเวลาที่กำหนดไว้สามารถสรุปได้
  • ยอมรับ ม.ค. ... Dec descriptors สำหรับเดือนของปี
  • ยอมรับจันทร์ ... ตัวอธิบายดวงอาทิตย์สำหรับวันต่อสัปดาห์
  • พยายามที่จะจัดการกับ anacron ซึ่งเป็นรูปแบบของเดเมียนเมื่อมันหายไป
  • พยายามจัดการกับบรรทัด crontab ที่เรียกใช้ไฟล์หลังจากทดสอบความสามารถในการประมวลผลล่วงหน้าโดยใช้ "[-x ... ]"
  • พยายามจัดการกับบรรทัด crontab ที่เรียกใช้ไฟล์หลังจากทดสอบความสามารถในการปฏิบัติการล่วงหน้าโดยใช้ "command -v"
  • อนุญาตให้ใช้ช่วงเวลาและรายการ
  • รองรับการใช้งานชิ้นส่วนในไฟล์ crontab / var / spool เฉพาะผู้ใช้

ตอนนี้ฉันกำลังเผยแพร่สคริปต์อย่างเต็มที่ที่นี่

https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107


2

เนื่องจากมันเป็นเรื่องของการวนลูปผ่านไฟล์ ( /etc/passwd) และดำเนินการแอ็คชันฉันจึงขาดวิธีการที่เหมาะสมในฉันจะอ่านไฟล์ (data stream, variable) ทีละบรรทัด (และ / หรือ field-by-field ได้อย่างไร )? :

while IFS=":" read -r user _
do
   echo "crontab for user ${user}:"
   crontab -u "$user" -l
done < /etc/passwd

สิ่งนี้จะอ่านทีละ/etc/passwdบรรทัดโดยใช้:เป็นตัวคั่นฟิลด์ โดยบอกว่าread -r user _เรา$userเก็บฟิลด์แรกและ_ส่วนที่เหลือ (เป็นเพียงตัวแปรขยะเพื่อละเว้นฟิลด์)

ด้วยวิธีนี้เราสามารถเรียกcrontab -uใช้ตัวแปร$userซึ่งเราอ้างอิงเพื่อความปลอดภัย (ถ้ามันมีช่องว่างหรือไม่มันไม่น่าจะอยู่ในไฟล์ดังกล่าว แต่คุณไม่มีทางรู้)


1

บน Solaris สำหรับชื่อผู้ใช้ที่รู้จักโดยเฉพาะ:

crontab -l username

* Nix อื่น ๆ ทั้งหมดต้องการ-uตัวแก้ไข:

crontab -u username -l

ในการรับงานทั้งหมดของผู้ใช้ในคราวเดียวบน Solaris ก็เหมือนกับโพสต์อื่น ๆ ด้านบน:

for user in $(cut -f1 -d: /etc/passwd); do crontab -l $user 2>/dev/null; done

-1

สำหรับฉันดู / var / spool / cron / crontabs เป็นวิธีที่ดีที่สุด


2
นี้ได้รับการตอบก่อน
bummi

-2

สคริปต์นี้ส่งเอาต์พุต Crontab ไปที่ไฟล์และยังแสดงรายการผู้ใช้ทั้งหมดที่ยืนยันผู้ที่ไม่มีรายการ crontab:

for user in $(cut -f1 -d: /etc/passwd); do 
  echo $user >> crontab.bak
  echo "" >> crontab.bak
  crontab -u $user -l >> crontab.bak 2>> > crontab.bak
done

//, RobFrost, คุณแน่ใจหรือว่าสคริปต์นี้ตามที่เขียนไว้ที่นี่ใช้งานได้อย่างสม่ำเสมอ?
Nathan Basanese

ดูทำไมคุณไม่อ่านบรรทัดด้วย "สำหรับ" นอกจากนี้ยังได้รับคำตอบหลายครั้งก่อนที่คุณจะโพสต์
fedorqui 'ดังนั้นหยุดการทำร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.