Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

การกำหนดค่า Cron Jobs ด้วย Crontab บน CentOS/RHEL Linux

Cron เป็นตัวจัดตารางงานสำหรับระบบยูนิกซ์รวมถึงทุกการกระจาย Linux เดมอน cron ทำงานในพื้นหลังบนโฮสต์ของคุณและรันงานตามตารางเวลา ในบทความนี้ เราจะแสดงวิธีติดตั้ง cron บนเซิร์ฟเวอร์ที่รัน CentOS หรือ RHEL Linux เรียนรู้ไวยากรณ์ cron และจัดตารางงาน cron ด้วย crontab

วิธีติดตั้ง Cron บน Centos หรือ RHEL Linux

โดยค่าเริ่มต้น cron พร้อมใช้งานทันทีหลังการติดตั้ง RHEL หรือ CentOS หากคุณไม่มีด้วยเหตุผลบางอย่าง คุณสามารถติดตั้งจากที่เก็บพื้นฐานโดยใช้คำสั่ง yum หรือ dnf:

# dnf update -y — เพื่ออัปเดตแพ็กเกจทั้งหมดบนโฮสต์
# dnf install crontabs -y — เพื่อติดตั้ง cron

การกำหนดค่า Cron Jobs ด้วย Crontab บน CentOS/RHEL Linux

เปิดใช้งานและรันเดมอน crond หลังการติดตั้ง:

# systemctl enable crond.service
# systemctl start crond.service

วิธีเพิ่ม Cron Jobs ด้วย Crontab

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อเพิ่มงานเข้า cron:

# crontab -e

คำสั่งนี้จะเปิดไฟล์งานสำหรับผู้ใช้ของคุณใน text editor เริ่มต้น (ในกรณีของผมคือ vim แต่คุณสามารถเปลี่ยนเป็นอันที่สะดวกกว่า เช่น nano) วิธีการกำหนดค่านี้ป้องกันข้อผิดพลาดไวยากรณ์ Crontab ไม่อนุญาตให้บันทึกไฟล์กำหนดค่าที่มีข้อผิดพลาด

คุณยังสามารถแก้ไขไฟล์ cron jobs ด้วยตนเองใน mc:

# mcedit /var/spool/cron/root – ชื่อไฟล์อาจแตกต่างกันขึ้นอยู่กับผู้ใช้

เพื่อเพิ่มงานง่ายๆ ที่รันสคริปต์ bash ใน cron ให้ใส่คำสั่งนี้:

# crontab -e

จากนั้นเพิ่มตารางเวลางานและพาธไปยังไฟล์สคริปต์:

* * * * * /root/test.sh

บันทึกไฟล์ (คล้ายกับการแก้ไขใน vim: กด Ctrl+O เพื่อบันทึกไฟล์และ Ctrl+X เพื่อออก)

หากคุณทำถูกต้อง งานของคุณจะถูกเพิ่มเข้า cron ในการแสดงรายการ cron jobs ให้รันคำสั่งต่อไปนี้:

# cat /var/spool/cron/root

* * * * * /root/test.sh

หรือคำสั่งนี้:

# crontab -l

สคริปต์นี้จะรันผ่าน cron ทุกนาที

เวลาขั้นต่ำคือ 1 นาที เดมอน cron สแกนรายการงานทุกนาที มันตรวจสอบไฟล์และไดเรกทอรีต่อไปนี้:

/etc/crontab /etc/cron.*/. /var/spool/cron/

แต่ละรายการตารางเวลา crontab ประกอบด้วย 5 ฟิลด์:

minutes hours day_of_a_month months week_day # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed

การกำหนดค่า Cron Jobs ด้วย Crontab บน CentOS/RHEL Linux

คุณสามารถใช้ค่าที่ถูกต้องต่อไปนี้สำหรับแต่ละฟิลด์:

Field Value Range
Minutes 0-59
Hours 0-23
Day of a month 1-31
Month 1-12 or jan feb mar apr may jun jul aug sep oct nov dec
Week day 0-6 (where 0 is Sunday) or sun mon tue wed thu fri sat

ตัวอักษร * หมายถึงค่าที่อนุญาตทั้งหมด นี่คือตัวอย่างงาน:

30 00 * * 1 /root/test.sh

สคริปต์ในงานจะรันทุกวันจันทร์เวลา 00:30 น.

เพื่อให้ไวยากรณ์ไฟล์ cron ง่ายขึ้น ตัวอักษรพิเศษบางตัวถูกใช้:

  • Comma (,) ใช้แยกค่าตารางเวลาเพื่อรันงานเดียวกันในเวลาต่างกัน ตัวอย่างเช่น หากคุณต้องการรันงานที่นาทีที่ 15 และ 30 ของทุกชั่วโมง คุณสามารถตั้งตารางเวลาได้ดังนี้:
15 * * * * 30 * * * *

หรือใช้ไวยากรณ์สั้นๆ ด้วย comma:

15,30 * * * *
  • Slash (/) ใช้ทำซ้ำงาน ตัวอย่างเช่น คุณต้องการรันงานทุก 2 ชั่วโมง การใช้ / จะทำให้เนื้อหาไฟล์ cron สั้นลงมาก มิฉะนั้นจะค่อนข้างยาว:
* */2 * * *
  • Hyphen (-) ระบุช่วงค่าในฟิลด์ หากคุณต้องการรันงานสำหรับ 10 นาทีแรกหรือ 10 นาทีสุดท้ายของชั่วโมง ให้ระบุช่วงโดยใช้ hyphen:
0-10 * * * * 50-60 * * * *

นี่คือตัวอย่างตารางเวลา cron เพิ่มเติม:

  • รันในวันธรรมดาเวลา 12:00 น. และ 18:00 น.: 0 12,18 * * 1-5
  • ทุก 30 นาที: */30 * * * *
  • ทุกวันเสาร์: 0 0 * * 6
  • ทุกวันอังคารและพฤหัสบดีเวลา 02:00 น.: 0 2 * * 2,4

คุณยังสามารถใช้ตัวแปรพิเศษใน cron ได้

Variable Description Syntax
@reboot รันครั้งเดียวตอนบูท
@yearly

or

@annually

ปีละครั้ง 0 0 1 1 *
@monthly เดือนละครั้ง 0 0 1 * *
@weekly สัปดาห์ละครั้ง 0 0 * * 0
@daily ทุกวัน 0 0 * * *
@hourly ทุกชั่วโมง 0 * * * *
@midnight ตอนเที่ยงคืน

หมายความว่าสำหรับการรันทุกวัน คุณสามารถใช้ไวยากรณ์ cron ดังนี้:

@daily echo "Cron check"

คุณสามารถแก้ไขไฟล์ crontab ของผู้ใช้อื่นได้:

# crontab -u username

วิธีส่งการแจ้งเตือน Cron ไปยังอีเมล

หากคุณต้องการรับข้อมูลเกี่ยวกับการรันงาน crontab ของคุณทางอีเมล คุณต้องกำหนดค่าไฟล์ cron พร้อมงาน

เพื่อส่งอีเมล ต้องมีตัวแทนส่งจดหมาย (MTA) ติดตั้งบนเซิร์ฟเวอร์ของคุณ ในการทดสอบ ผมติดตั้ง sendmail บนโฮสต์ Linux ของผม:

# dnf install sendmail -y
# service sendmail start

มาตั้งค่าพารามิเตอร์สำหรับส่งอีเมลในไฟล์ cron เพิ่มบรรทัดต่อไปนี้ในไฟล์:

MAILTO="youremail@gmail.com" SHELL=/bin/bash HOME=/ * * * * * echo "Cron check"

SHELL — เซลล์ของผู้ใช้

HOME — พาธไปยังไฟล์ cron

การกำหนดค่า Cron Jobs ด้วย Crontab บน CentOS/RHEL Linux

ทุกครั้งที่ cron job เริ่มต้น การแจ้งเตือนอีเมลจะถูกส่งไปยังกล่องจดหมายของคุณ

คุณสามารถบันทึกข้อมูลเกี่ยวกับการรันงาน cron ไปยังไฟล์ล็อกได้ ในการทำเช่นนั้น ให้เพิ่ม >> ไปที่ท้ายไฟล์และป้อนพาธไปยังไฟล์ล็อกของคุณ:

* * * * * echo "Cron check" >> /var/log/admin/journal.log

หากมีงานมากในไฟล์ crontab ของคุณ และคุณไม่ต้องการรับผลลัพธ์ของบางงานทางอีเมล คุณสามารถรันงานเหล่านั้นในโหมดเงียบ:

* * * * * echo "Cron check" >> /dev/null 2>&1

ไฟล์กำหนดค่า Cron และ Logs

ไฟล์กำหนดค่า cron หลักคือ /etc/crontab นอกจากไฟล์ cron แล้ว คุณสามารถรันงานจากไดเรกทอรีต่อไปนี้ได้:

  • /etc/cron.daily – เพื่อเริ่มสคริปต์วันละครั้ง
  • /etc/cron.hourly – …. ทุกชั่วโมง
  • /etc/cron.monthly – …. เดือนละครั้ง
  • /etc/cron.weekly – …. สัปดาห์ละครั้ง

เพียงวางไฟล์สคริปต์ในหนึ่งในไดเรกทอรีเพื่อรันตามตารางเวลา

คุณสามารถจำกัดการเข้าถึงตัวจัดตารางเวลาโดยใช้ /etc/cron.allow และ /etc/cron.deny เพียงพอที่จะสร้างไฟล์เหล่านี้และเพิ่มผู้ใช้ที่ได้รับอนุญาตหรือปฏิเสธการรันงาน cron

คุณสามารถเพิ่มงานเข้า /etc/crontab ได้เช่นกัน ปกติไฟล์นี้ใช้โดยผู้ใช้ root หรือเพื่อกำหนดค่าระบบ ไฟล์ cron jobs ของผู้ใช้ส่วนตัวถูกเก็บใน /var/spool/cron/ หรือ /var/cron/tabs/

เพื่อติดตามงาน cron หรือข้อผิดพลาด คุณสามารถดูไฟล์ล็อก: /var/log/cron ไฟล์นี้บันทึกงานทั้งหมดและข้อผิดพลาดในการทำงานของเดมอน (หากมี):

การกำหนดค่า Cron Jobs ด้วย Crontab บน CentOS/RHEL Linux