Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

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

Cron เป็นตัวกำหนดเวลางานสำหรับระบบที่ใช้ Unix รวมถึง Linux distros ทั้งหมด cron daemon ทำงานในพื้นหลังบนโฮสต์ของคุณและรันงานที่กำหนดเวลาไว้ตามกำหนดการ ในบทความนี้เราจะแสดงวิธีการติดตั้ง 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 ด้วย Crontab บน CentOS/RHEL Linux

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

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

จะเพิ่มงาน Cron ด้วย Crontab ได้อย่างไร

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

# crontab -e

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

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

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

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

# crontab -e

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

* * * * * /root/test.sh

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

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

# cat /var/spool/cron/root

* * * * * /root/test.sh

หรืออันนี้:

# crontab -l

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

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

/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 ด้วย Crontab บน CentOS/RHEL Linux

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

ฟิลด์ ช่วงค่า
นาที 0-59
ชั่วโมง 0-23
วันของเดือน 1-31
เดือน 1-12 หรือ jan feb mar apr may jun jul aug sep oct nov dec
สัปดาห์วัน 0-6 (โดยที่ 0 คือวันอาทิตย์) หรือ sun mon tue wed thu fri sat

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

30 00 * * 1 /root/test.sh

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

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

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

หรือใช้ไวยากรณ์ที่สั้นกว่าด้วยเครื่องหมายจุลภาค:

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

ต่อไปนี้คือตัวอย่างเพิ่มเติมของกำหนดการ cron:

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

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

ตัวแปร คำอธิบาย ไวยากรณ์
@reboot รันครั้งเดียวตอนบูท
@yearly

หรือ

@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 ด้วยงาน

ในการส่งอีเมล ต้องติดตั้งตัวแทนอีเมลบนเซิร์ฟเวอร์ของคุณ ในการทดสอบ ฉันได้ติดตั้ง ส่งเมล บนโฮสต์ Linux ของฉัน:

# dnf install sendmail -y
# service sendmail start

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

MAILTO="[email protected]"
SHELL=/bin/bash
HOME=/
* * * * * echo "Cron check"

SHELL — เชลล์ผู้ใช้

หน้าแรก — เส้นทางไปยังไฟล์ cron

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

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

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

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

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

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

ไฟล์และบันทึกการกำหนดค่า Cron

ไฟล์คอนฟิกูเรชันหลักของ 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 เช่นกัน. โดยปกติ ไฟล์ถูกใช้โดยผู้ใช้รูทหรือเพื่อกำหนดค่างานระบบ ไฟล์ผู้ใช้ส่วนบุคคลของงาน cron ถูกเก็บไว้ใน /var/spool/cron/ หรือ /var/cron/tabs/ .

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

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