ฉันจะดูรายการงาน cron ทั้งหมดที่กำหนดไว้ในเครื่องของฉันได้อย่างไร


201

ดูแลระบบของฉันตั้งค่างาน cron จำนวนมากบนเครื่องของฉัน ฉันต้องการที่จะรู้ว่าสิ่งที่กำหนดไว้สำหรับเวลาอะไร ฉันจะรับรายการนั้นได้อย่างไร


3
นี่ไม่ใช่คำตอบสำหรับคำถาม แต่เป็นเพียงหมายเหตุเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุด หนึ่งสามารถกำหนดค่าเหล่านี้เป็นงาน cron ต่อผู้ใช้rootหรือapacheหรืออะไรก็ตาม แต่ควรใช้/etc/crontabหรือ (ดีกว่าใน distros ส่วนใหญ่) และ/etc/cron.d /etc/cron.[timeframe]
mattdm


ฉันได้โพสต์สคริปต์ที่ทำให้สิ่งนี้เป็นประโยชน์โดยอัตโนมัติที่: - stackoverflow.com/questions/134906/ ......มันไม่สมบูรณ์แบบ แต่อาจครอบคลุม 90% ของความต้องการ มันเป็นตัวอย่างที่ดีของสิ่งที่ไม่ควรเขียนด้วยการทุบตี
david collier

คำตอบ:


143

ขึ้นอยู่กับการตั้งค่าระบบ linux ของคุณคุณสามารถดู:

  • /var/spool/cron/* (ผู้ใช้ crontabs)
  • /etc/crontab (crontab ทั้งระบบ)

นอกจากนี้หลาย distros มี:

  • /etc/cron.d/* การกำหนดค่าเหล่านี้มีไวยากรณ์เหมือนกัน /etc/crontab

  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly,/etc/cron.monthly

เหล่านี้เป็นไดเรกทอรีที่มีไฟล์เรียกทำงานที่เรียกใช้งานรายชั่วโมงรายวันรายสัปดาห์หรือรายเดือนตามชื่อไดเรกทอรี

ยิ่งไปกว่านั้นคุณสามารถมีงาน (เช็ค/var/spool/at/*) anacron ( /etc/anacrontabและ/var/spool/anacron/*) และอื่น ๆ ที่ฉันลืมได้


4
ขอบคุณฉันพบพวกเขา/etc/cron.dailyมา วิธีการที่ไม่ว่าdailyไฟล์ที่ทำงานหรือไม่ งานรายวันจะทำงานกี่โมง บนเครื่องของฉันดูเหมือนว่าพวกเขาจะวิ่งไปตอนเที่ยง แต่อยากจะบอกระบบดูแลฉันว่าจะเปลี่ยนเป็นเที่ยงคืนได้อย่างไร
แฟรงก์

5
cron.daily ถูกเรียกจาก/etc/crontabเช่นในระบบ Ubuntu ของฉันมันคือ: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )ซึ่งหมายถึง 6:25 น.
Kowh

cron.daily ถูกเรียกจาก / etc / crontab ในระบบ RHEL5 ของฉันด้วยหากคุณต้องการจุดข้อมูลเพิ่มเติม
jsbillings

ใน Fedora รุ่นใหม่ (และอาจเป็น RHEL6 - ยังไม่ได้ดู) croniedaemon จะดูแลสิ่งเหล่านั้นโดยใช้การกำหนดค่า/etc/anacrontabระบบ
mattdm

บางครั้งมันก็มีอยู่/var/cronด้วย
CMCDragonkai

135

ด้วย Crons ส่วนใหญ่ (เช่นVixie-Cron - ค่าเริ่มต้น Debian / Ubuntu, ค่าเริ่มต้นของ Cronie - Fedora, Solaris Cron ... ) คุณจะได้รับรายการงาน cron ที่กำหนดไว้สำหรับผู้ใช้ปัจจุบันผ่าน:

$ crontab -l

หรือสำหรับผู้ใช้รายอื่นผ่านทาง

# crontab -l -u juser

รับ crontabs สำหรับผู้ใช้ทั้งหมดคุณสามารถวนรอบผู้ใช้ทั้งหมดและเรียกคำสั่งนี้

หรือคุณสามารถค้นหาไฟล์สปูล โดยปกติแล้วพวกเขาจะถูกบันทึกไว้ภายใต้/var/spool/cronเช่นสำหรับ vcron ไดเรกทอรีต่อไปนี้

/var/spool/cron/crontabs

มี crontabs ที่กำหนดค่าไว้ทั้งหมดของผู้ใช้ทั้งหมดยกเว้นผู้ใช้รูทที่สามารถกำหนดค่างานผ่าน crontab ทั่วทั้งระบบซึ่งตั้งอยู่ที่

/etc/crontab

ด้วยcronie (ค่าดีฟอลต์บน Fedora / CentOS) มี.dไดเร็กทอรีการกำหนดค่าสไตล์สำหรับงาน cron ของระบบเช่นกัน:

/etc/cron.d

(เช่นเคย.dไดเรกทอรีทำให้การบำรุงรักษารายการกำหนดค่าง่ายขึ้นซึ่งเป็นส่วนหนึ่งของแพ็คเกจที่ต่างกัน)

เพื่อความสะดวกมากที่สุดการแจกแจงส่วนใหญ่ยังมีไดเรกทอรีที่สคริปต์ที่เชื่อมโยง / เก็บไว้จะถูกดำเนินการเป็นระยะเช่น:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

การดำเนินการทันเวลาของสคริปต์เหล่านั้นมักจะมีการจัดการผ่านทางrun-partsรายการใน crontab ระบบหรือผ่านทางanacron

ด้วยSystemd (เช่นใน Fedora, CentOS 7, ... ) การปฏิบัติงานเป็นระยะสามารถกำหนดค่าเพิ่มเติมผ่านหน่วยตัวจับเวลาได้ ตัวจับเวลาระบบที่เปิดใช้งานสามารถแสดงผ่าน:

$ systemctl list-timers

โปรดทราบว่าผู้ใช้ที่อยู่ข้างๆรูทอาจมีอินสแตนซ์ผู้ใช้ systemd กำลังทำงานที่มีการกำหนดค่าตัวนับเช่นกัน ตัวอย่างเช่นบน Fedora โดยค่าเริ่มต้นอินสแตนซ์ผู้ใช้ systemd เริ่มต้นขึ้นสำหรับผู้ใช้แต่ละรายที่เข้าสู่ระบบในปัจจุบันพวกเขาสามารถจดจำได้ผ่าน:

$ ps aux | grep 'systemd[ ]--user'

ตัวจับเวลาผู้ใช้เหล่านั้นสามารถแสดงได้ผ่าน:

$ systemctl --user list-timers

ทางเลือกอื่นในการออกlist-timersคำสั่งคือการค้นหาไฟล์หน่วยตัวจับเวลา (รูปแบบ*.timer:) และลิงก์สัญลักษณ์ไปยังพวกเขาในไดเรกทอรีระบบและผู้ใช้ systemd config ปกติ:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(เช่นเดียวกับหน่วยบริการปกติหน่วยจับเวลาถูกเปิดใช้งานผ่านการสร้างลิงก์สัญลักษณ์ในไดเรกทอรี systemd config ที่เหมาะสม)

ดูสิ่งนี้ด้วย:


ฉันไม่ได้ลงคะแนน แต่ฉันก็พยายามcrontab -l -u root(เพราะ cronjobs ผู้ที่ฉันต้องการที่จะรู้เกี่ยวกับการทำงานภายใต้root) -uและมันบอกว่าผมไม่ได้มีสิทธิพิเศษในการใช้
แฟรงค์

3
จากนั้นคุณต้องโทรหามันด้วยสิทธิ์ที่เพียงพอ - เช่นในฐานะrootผู้ใช้
maxschlepzig

2
ยังไม่เสร็จสมบูรณ์ - cron บางรุ่นรันงานจาก /etc/cron.d และ /etc/cron.{daily,hourly,monthly,monthly,weekly} โดยไม่มีโปรแกรมตัวช่วยเรียกจาก / etc / crontab
mattdm

2
@maxschlepzig - แต่ไม่เสมอไป และคำถามก็คือ "ฉันจะหารายชื่องาน cron ทั้งหมด " ได้อย่างไร; คำตอบที่ "ดีนี่คือบางส่วนของพวกเขา" ไม่ใช่คำตอบ
mattdm

1
@maxschlepzig - cronieในขณะที่จัดส่งใน Fedora และ RHEL6 ไม่ได้หมายถึงผู้ที่อยู่ในแต่แทนที่จะใช้/etc/crontab /etc/anacrontabฉันอาจเข้าใจผิดเกี่ยวกับการใช้งานจริงใด ๆ ที่ไม่ได้อ้างถึงสิ่งเหล่านี้ในไฟล์ปรับแต่งใด ๆ (แต่แล้วฉันก็ไม่ได้ลงคะแนนด้วยเช่นกัน .... ฉันแค่บอกว่า ')
mattdm

5

เพื่อแสดงรายการ crons ทั้งหมดสำหรับผู้ใช้ที่กำหนด

crontab -u ชื่อผู้ใช้ -l;

เพื่อแสดงรายการ crons ทั้งหมดสำหรับผู้ใช้ทั้งหมด

เรียกใช้ในฐานะผู้ใช้ขั้นสูง

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done

1
OP ขอรายการของงาน cron ทั้งหมด
Drav Sloan

1
ด้วยเหตุผลบางอย่างที่ไม่แสดง /etc/cron.d/ งาน
jamshid

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