Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

Master Linux Crontab:15 ตัวอย่างการจัดตารางเวลางาน Cron ของผู้เชี่ยวชาญ

Master Linux Crontab:15 ตัวอย่างการจัดตารางเวลางาน Cron ของผู้เชี่ยวชาญ ผู้ดูแลระบบ Linux ที่มีประสบการณ์ทราบถึงความสำคัญของการรันงานบำรุงรักษาตามปกติในเบื้องหลังโดยอัตโนมัติ
05
ยูทิลิตี้ Linux Cron เป็นวิธีที่มีประสิทธิภาพในการกำหนดเวลางานเบื้องหลังตามปกติตามเวลาและ/หรือวันที่กำหนดอย่างต่อเนื่อง
19
บทความนี้เป็นส่วนหนึ่งของชุดเคล็ดลับการเพิ่มผลผลิตสำหรับ Geeks ที่กำลังดำเนินอยู่ ในบทความนี้ เราจะมาทบทวน 15 ตัวอย่างที่ยอดเยี่ยมของการจัดตารางงาน crontab
28

รูปแบบ Linux Crontab

MIN HOUR DOM MON DOW CMD
สนาม คำอธิบาย ค่าที่อนุญาต ฟิลด์ MINMinute0 ถึง 59HOURHour ฟิลด์0 ถึง 23DOMวันของเดือน1-31MONthฟิลด์1-12DOWวันของสัปดาห์0-6CMDCommandคำสั่งใดๆ ที่จะดำเนินการ

1. การจัดตารางงานตามเวลาที่กำหนด

การใช้งานพื้นฐานของ cron คือการดำเนินงานในเวลาที่กำหนดดังที่แสดงด้านล่าง สิ่งนี้จะดำเนินการเชลล์สคริปต์การสำรองข้อมูลแบบเต็ม (การสำรองข้อมูลแบบเต็ม) ในวันที่ 10 มิถุนายน 08:30 น. .
33
โปรดทราบว่าฟิลด์เวลาใช้รูปแบบ 24 ชั่วโมง ดังนั้น สำหรับเวลา 8.00 น. ให้ใช้ 8 และสำหรับ 20.00 น. ให้ใช้ 20

30 08 10 06 * /home/ramesh/full-backup
  • 30 – นาทีที่ 30
  • 08 – 08.00 น.
  • 10 – วันที่ 10
  • 06 – เดือนที่ 6 (มิถุนายน)
  • * – ทุกวันในสัปดาห์

2. กำหนดเวลางานมากกว่าหนึ่งอินสแตนซ์ (เช่น วันละสองครั้ง)

สคริปต์ต่อไปนี้ทำการสำรองข้อมูลส่วนเพิ่มวันละสองครั้งทุกวัน
47
ตัวอย่างนี้ดำเนินการสคริปต์เชลล์การสำรองข้อมูลส่วนเพิ่มที่ระบุ (การสำรองข้อมูลส่วนเพิ่ม) เวลา 11:00 น. และ 16:00 น. ทุกวัน ค่าที่คั่นด้วยเครื่องหมายจุลภาคในฟิลด์ระบุว่าจำเป็นต้องดำเนินการคำสั่งในเวลาดังกล่าวทั้งหมด

00 11,16 * * * /home/ramesh/bin/incremental-backup
  • 00 – นาทีที่ 0 (ด้านบนของชั่วโมง)
  • 11,16 – 11.00 น. และ 16.00 น.
  • * – ทุกวัน
  • * – ทุกเดือน
  • * – ทุกวันในสัปดาห์

3. กำหนดเวลางานตามช่วงเวลาที่กำหนด (เช่น เฉพาะวันธรรมดา)

หากคุณต้องการให้งานถูกจัดกำหนดการทุกชั่วโมงในช่วงเวลาที่กำหนด ให้ใช้สิ่งต่อไปนี้

งาน Cron ทุกวันในช่วงเวลาทำงาน

ตัวอย่างนี้จะตรวจสอบสถานะของฐานข้อมูลทุกวัน (รวมสุดสัปดาห์) ในช่วงเวลาทำงาน 9.00 – 18.00 น.

00 09-18 * * * /home/ramesh/bin/check-db-status
  • 00 – นาทีที่ 0 (ด้านบนของชั่วโมง)
  • 09-18 – 09.00 น. 10.00 น. 11.00 น. 00.00 น. 13.00 น. 14.00 น. 15.00 น. 16.00 น. 17.00 น. 18.00 น.
  • * – ทุกวัน
  • * – ทุกเดือน
  • * – ทุกวันในสัปดาห์

งาน Cron ทุกวันธรรมดาในช่วงเวลาทำงาน

ตัวอย่างนี้จะตรวจสอบสถานะของฐานข้อมูลทุกวันธรรมดา (ไม่รวมวันเสาร์และอาทิตย์) ในช่วงเวลาทำงาน 9.00 – 18.00 น.

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
  • 00 – นาทีที่ 0 (ด้านบนของชั่วโมง)
  • 09-18 – 09.00 น. 10.00 น. 11.00 น. 00.00 น. 13.00 น. 14.00 น. 15.00 น. 16.00 น. 17.00 น. 18.00 น.
  • * – ทุกวัน
  • * – ทุกเดือน
  • 1-5 -จันทร์ อังคาร พุธ พฤหัสบดี และศุกร์ (ทุกวันธรรมดา)

4. จะดูรายการ Crontab ได้อย่างไร

ดูรายการ Crontab ของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน

หากต้องการดูรายการ crontab ของคุณ ให้พิมพ์ crontab -l จากบัญชี unix ของคุณดังที่แสดงด้านล่าง

ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
[Note: This displays crontab of the current logged in user]

ดูรายการรูท Crontab

เข้าสู่ระบบในฐานะผู้ใช้รูท (su – root) และทำ crontab -l ดังที่แสดงด้านล่าง

root@dev-db# crontab -l
no crontab for root

Crontab HowTo:ดูรายการ Crontabs ของผู้ใช้ Linux อื่น

หากต้องการดูรายการ crontab ของผู้ใช้ Linux รายอื่น ให้เข้าสู่ระบบรูทและใช้ -u {ชื่อผู้ใช้} -l ดังที่แสดงด้านล่าง

root@dev-db# crontab -u sathiya -l
@monthly /home/sathiya/monthly-backup
00 09-18 * * * /home/sathiya/check-db-status

5. จะแก้ไขรายการ Crontab ได้อย่างไร

แก้ไขรายการ Crontab ของผู้ใช้ที่เข้าสู่ระบบปัจจุบัน

หากต้องการแก้ไขรายการ crontab ให้ใช้ crontab -e ตามที่แสดงด้านล่าง ตามค่าเริ่มต้น การดำเนินการนี้จะแก้ไข crontab ของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน

ramesh@dev-db$ crontab -e
@yearly /home/ramesh/centos/bin/annual-maintenance
*/10 * * * * /home/ramesh/debian/bin/check-disk-space
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C
[Note: This will open the crontab file in Vim editor for editing.
Please note cron created a temporary /tmp/crontab.XX... ]

เมื่อคุณบันทึกไฟล์ชั่วคราวข้างต้นด้วย :wq มันจะบันทึก crontab และแสดงข้อความต่อไปนี้เพื่อระบุว่าแก้ไข crontab สำเร็จแล้ว

~
"crontab.XXXXyjWkHw" 2L, 83C written
crontab: installing new crontab

แก้ไขรายการ Root Crontab

เข้าสู่ระบบในฐานะผู้ใช้รูท (su – root) และทำ crontab -e ดังที่แสดงด้านล่าง

root@dev-db# crontab -e

แก้ไขรายการไฟล์ Crontab ของผู้ใช้ Linux อื่น

หากต้องการแก้ไขรายการ crontab ของผู้ใช้ Linux อื่น ให้เข้าสู่ระบบรูทและใช้ -u {ชื่อผู้ใช้} -e ดังที่แสดงด้านล่าง

root@dev-db# crontab -u sathiya -e
@monthly /home/sathiya/fedora/bin/monthly-backup
00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status
~
~
~
"/tmp/crontab.XXXXyjWkHw" 2L, 83C

6. กำหนดเวลางานทุกนาทีโดยใช้ Cron

ตามหลักการแล้ว คุณอาจไม่จำเป็นต้องกำหนดเวลางานทุกนาที แต่การทำความเข้าใจตัวอย่างนี้จะช่วยให้คุณเข้าใจตัวอย่างอื่นๆ ที่กล่าวถึงด้านล่างในบทความนี้

* * * * * CMD

* หมายถึงหน่วยที่เป็นไปได้ทั้งหมด เช่น ทุกนาทีของทุกชั่วโมงตลอดทั้งปี มากกว่าการใช้ * นี้โดยตรง คุณจะพบว่ามีประโยชน์มากในกรณีต่อไปนี้

  • เมื่อคุณระบุ */5 ในช่องนาทีหมายถึงทุกๆ 5 นาที
  • เมื่อคุณระบุ 0-10/2 ในช่องนาที หมายถึงทุกๆ 2 นาทีใน 10 นาทีแรก
  • ดังนั้นแบบแผนข้างต้นจึงสามารถใช้กับอีก 4 ฟิลด์ที่เหลือทั้งหมดได้

7. กำหนดเวลางาน Cron พื้นหลังทุกๆ 10 นาที

ใช้สิ่งต่อไปนี้ หากคุณต้องการตรวจสอบพื้นที่ดิสก์ทุกๆ 10 นาที

*/10 * * * * /home/ramesh/check-disk-space

มันดำเนินการคำสั่ง check-disk-space ที่ระบุทุกๆ 10 นาทีตลอดทั้งปี แต่คุณอาจจำเป็นต้องดำเนินการคำสั่งเฉพาะในเวลาทำการหรือในทางกลับกัน ตัวอย่างข้างต้นแสดงวิธีการทำสิ่งเหล่านั้น
52
แทนที่จะระบุค่าใน 5 ช่อง เราสามารถระบุได้โดยใช้คำสำคัญคำเดียวดังที่ระบุไว้ด้านล่าง
63
มีกรณีพิเศษที่คุณสามารถใช้ @ ตามด้วยคำหลักแทน 5 ช่องข้างต้นได้ เช่น รีบูต เที่ยงคืน รายปี รายชั่วโมง

คำหลัก เทียบเท่า @ yearly0 0 1 1 *@daily0 0 * * *@hourly0 * * * *@rebootRun เมื่อเริ่มต้น

8. กำหนดเวลางานนาทีแรกของทุกปีโดยใช้ @yearly

หากคุณต้องการให้งานถูกดำเนินการในนาทีแรกของทุกปี คุณสามารถใช้ @yearly คีย์เวิร์ด cron ดังที่แสดงด้านล่าง
72
ซึ่งจะดำเนินการบำรุงรักษาประจำปีของระบบโดยใช้เชลล์สคริปต์การบำรุงรักษาประจำปีเวลา 00:00 น. ของวันที่ 1 มกราคมของทุกปี

@yearly /home/ramesh/red-hat/bin/annual-maintenance

9. กำหนดเวลางาน Cron เริ่มต้นทุกเดือนโดยใช้ @monthly

มันคล้ายกับ @yearly เหมือนข้างบน แต่ดำเนินการคำสั่งทุกเดือนหนึ่งครั้งโดยใช้ @monthly คำหลักครอน
84
สิ่งนี้จะดำเนินการสำรองข้อมูลเทปเชลล์สคริปต์เวลา 00:00 น. ของวันที่ 1 ของทุกเดือน

@monthly /home/ramesh/suse/bin/tape-backup

10. กำหนดเวลางานเบื้องหลังทุกวันโดยใช้ @daily

การใช้ @daily คำหลัก cron สิ่งนี้จะทำการล้างข้อมูลไฟล์บันทึกรายวันโดยใช้สคริปต์เชลล์ cleanup-logs เวลา 00:00 น. ทุกวัน

@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"

11. วิธีดำเนินการคำสั่ง Linux หลังจากรีบูตทุกครั้งโดยใช้ @reboot?

ใช้ @reboot cron ซึ่งจะดำเนินการคำสั่งที่ระบุหนึ่งครั้งหลังจากที่เครื่องบูตทุกครั้ง

@reboot CMD

12. วิธีปิดการใช้งาน / เปลี่ยนเส้นทางเอาต์พุตจดหมาย Crontab โดยใช้คำหลัก MAIL ได้อย่างไร

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

ramesh@dev-db$ crontab -l
MAIL="ramesh"
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
[Note: Crontab of the current logged in user with MAIL variable]

95
หากคุณไม่ต้องการให้ส่งอีเมลไปที่อื่น เช่น หากต้องการหยุดเอาต์พุต crontab ที่จะส่งอีเมล ให้เพิ่มหรืออัปเดตตัวแปร MAIL ใน crontab ดังที่แสดงด้านล่าง

MAIL=""

13. วิธีดำเนินการงาน Linux Cron ทุก ๆ วินาทีโดยใช้ Crontab

คุณไม่สามารถกำหนดเวลา cronjob ทุกวินาทีได้ เนื่องจากใน cron หน่วยขั้นต่ำที่คุณสามารถระบุได้คือนาที ในสถานการณ์ทั่วไป ไม่มีเหตุผลใดที่พวกเราส่วนใหญ่จะต้องรันงานใดๆ ในระบบทุกวินาที

14. ระบุตัวแปร PATH ใน Crontab

ตัวอย่างข้างต้นทั้งหมดเราได้ระบุพาธสัมบูรณ์ของคำสั่ง Linux หรือเชลล์สคริปต์ที่ต้องดำเนินการ
108
ตัวอย่างเช่น แทนที่จะระบุ /home/ramesh/tape-backup หากคุณต้องการระบุการสำรองข้อมูลเทป ให้เพิ่มพาธ /home/ramesh ไปยังตัวแปร PATH ใน crontab ดังที่แสดงด้านล่าง

ramesh@dev-db$ crontab -l
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh
@yearly annual-maintenance
*/10 * * * * check-disk-space
[Note: Crontab of the current logged in user with PATH variable]

15. การติดตั้ง Crontab จากไฟล์ Cron

แทนที่จะแก้ไขไฟล์ crontab โดยตรง คุณสามารถเพิ่มรายการทั้งหมดลงในไฟล์ cron ก่อนได้ เมื่อคุณมีรายการทั้งหมดในไฟล์แล้ว คุณสามารถอัปโหลดหรือติดตั้งลงใน cron ดังที่แสดงด้านล่าง

ramesh@dev-db$ crontab -l
no crontab for ramesh
$ cat cron-file.txt
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space
ramesh@dev-db$ crontab cron-file.txt
ramesh@dev-db$ crontab -l
@yearly /home/ramesh/annual-maintenance
*/10 * * * * /home/ramesh/check-disk-space

หมายเหตุ: การดำเนินการนี้จะติดตั้ง cron-file.txt ลงใน crontab ของคุณ ซึ่งจะลบรายการ cron เก่าของคุณด้วย ดังนั้น โปรดใช้ความระมัดระวังในขณะอัปโหลดรายการ cron จาก cron-file.txt

บทช่วยสอน Cron เพิ่มเติม

  • Cron Vs Anacron:วิธีการตั้งค่า Anacron บน Linux (พร้อมตัวอย่าง)
  • วิธีเรียกใช้ Cron ทุก ๆ 5 นาที วินาที ชั่วโมง วัน เดือน
  • 6 ตัวอย่างคำสั่ง Linux Crontab
  • วิธีการติดตั้ง แก้ไข หรือลบงาน Cron ในโหมดแบทช์
  • ทำความเข้าใจคำสั่ง at, atq, atrm, คำสั่งแบตช์โดยใช้ตัวอย่าง 9 ตัวอย่าง

บทความเกี่ยวกับ Linux ที่ยอดเยี่ยม

ต่อไปนี้คือ 15 ตัวอย่าง ที่ยอดเยี่ยมบางส่วน บทความที่คุณอาจพบว่ามีประโยชน์

  • แม่ครับ ผมเจอแล้ว! — 15 ตัวอย่างคำสั่งค้นหา Linux ที่ใช้งานได้จริง
  • 15 ตัวอย่างเพื่อเชี่ยวชาญประวัติบรรทัดคำสั่ง Linux
  • คำสั่ง Unix LS:ตัวอย่างการใช้งานจริง 15 ตัวอย่าง
  • ยึดครอง Grep! – 15 ตัวอย่างคำสั่ง Grep ที่ใช้งานได้จริง