งาน Cron: บทแนะนำสำหรับผู้เริ่มต้นใช้งานที่สมบูรณ์

Cron Jobs Complete Beginners Tutorial



Cron เป็นยูทิลิตี้ที่มีประโยชน์มากที่สุดในระบบปฏิบัติการ Linux หรือ UNIX ที่อนุญาตให้รันคำสั่งหรือสคริปต์ตามกำหนดเวลาที่กำหนดโดยผู้ใช้ไม่ต้องดำเนินการใดๆ คำสั่งและสคริปต์ที่กำหนดเวลาไว้ยังถูกตั้งชื่อเป็นงาน cron ส่วนใหญ่จะใช้สำหรับการทำงานที่เกิดซ้ำโดยอัตโนมัติ เช่น การเรียกใช้การสำรองข้อมูลตามกำหนดเวลา การล้างไฟล์ชั่วคราว การบำรุงรักษาระบบ และงานที่เกิดซ้ำอื่นๆ คล้ายกับ Task Scheduler ใน Windows OS

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







พื้นฐานของงาน Cron

มาทำความเข้าใจพื้นฐานของงาน cron กัน



Crond คืออะไร?

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



ไวยากรณ์งาน Cron

ไวยากรณ์สำหรับงาน cron มีดังนี้:





* * * * *สั่งการ/สคริปต์

จากซ้าย:

  • แรก * สอดคล้องกับนาที (0-59)
  • ที่สอง * สอดคล้องกับชั่วโมง (0-23)
  • ที่สาม * ตรงกับวันของเดือน (1-31)
  • ที่สี่ * ตรงกับเดือนของปี (1-12)
  • ที่ห้า * ตรงกับวันในสัปดาห์ (0-6 วันอาทิตย์ถึงวันเสาร์)

ในการระบุค่าหลายค่าในฟิลด์ ให้ใช้สัญลักษณ์ตัวดำเนินการต่อไปนี้:



  1. เครื่องหมายดอกจัน (*): เพื่อระบุค่าที่เป็นไปได้ทั้งหมดสำหรับฟิลด์
  2. แดช (-): ถึง NS กำหนดช่วงของค่า
  3. เครื่องหมายจุลภาค (,): เพื่อระบุรายการค่า
  4. ตัวคั่น (/): เพื่อระบุค่าขั้นตอน

การแก้ไขไฟล์ Crontab

Crontab เป็นไฟล์ที่มีงานที่กำหนดเวลาไว้ในไวยากรณ์เฉพาะ ไฟล์ crontab มีสองประเภท; อันหนึ่งสำหรับงาน cron เฉพาะระบบ และอีกอันสำหรับงาน cron เฉพาะผู้ใช้

งาน cron ระบบ

งาน cron ทั่วทั้งระบบอยู่ใน /etc/crontab ไฟล์และ /etc/cron.d ไดเร็กทอรีและทำงานผ่าน /etc/cron.hourly , /etc/cron.daily , /etc/cron.weekly และ /etc/cron.monthly. เฉพาะผู้ดูแลระบบเท่านั้นที่สามารถเข้าถึงไฟล์เหล่านี้ได้

ผู้ดูแลระบบสามารถกำหนดงาน cron โดยใช้คำสั่งต่อไปนี้:

$นาโน /ฯลฯ/crontab

นี่คือไวยากรณ์ของงานใน /etc/crontab ไฟล์:

# นาที ชม. dayofmonth เดือน dayofweek username command
* * * * *ผู้ใช้1ifconfig

งาน cron เฉพาะผู้ใช้

งาน cron เฉพาะผู้ใช้อยู่ใน / var / spool / cron / crontabs ไดเรกทอรี แม้ว่าคุณสามารถแก้ไขงานเหล่านี้ได้ด้วยตนเอง ขอแนะนำให้แก้ไขงานเหล่านี้โดยใช้คำสั่ง crontab -e

ผู้ใช้มาตรฐานสามารถกำหนดงาน cron โดยใช้คำสั่งต่อไปนี้:

$crontab-และ

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

ออกคำสั่งด้านล่างใน Terminal เพื่อแก้ไขไฟล์ crontab สำหรับผู้ใช้รายอื่น:

$sudocrontab-ยู <ชื่อผู้ใช้> -และ

ตัวอย่างเช่น หากคุณเข้าสู่ระบบในฐานะผู้ใช้ test1 และต้องการแก้ไขไฟล์ crontab สำหรับผู้ใช้ test2 คำสั่งจะเป็น:

$sudocrontab-ยูทดสอบ2-และ

นี่คือไวยากรณ์ของงาน cron ที่สามารถเพิ่มในไฟล์ crontab:

# m h dayofmonth เดือน dayofweek command
* * * * * ifconfig

คุณสามารถเห็นในงานเฉพาะผู้ใช้ที่ไม่มีชื่อผู้ใช้ที่ยื่น

คำสั่ง Crontab

คำสั่ง crontab ใช้เพื่อแก้ไข แสดงรายการ และลบงาน cron:

  • crontab -e ในการแก้ไขไฟล์ crontab ของผู้ใช้ปัจจุบัน
  • crontab -l เพื่อแสดงเนื้อหาของไฟล์ crontab
  • crontab -u [ชื่อผู้ใช้] ในการแก้ไขไฟล์ crontab ของผู้ใช้รายอื่น
  • crontab -r ในการลบไฟล์ crontab ของผู้ใช้ปัจจุบัน
  • crontab -i เพื่อแสดงพรอมต์ก่อนที่จะลบไฟล์ crontab ของผู้ใช้ปัจจุบัน

การจัดตารางงานกับ Cron

ด้วย Cron คุณสามารถเรียกใช้งานตามเวลา วันที่ และช่วงเวลาที่กำหนดโดยมีหน่วยต่ำสุดเป็นนาที เช่น คุณสามารถเรียกใช้งานได้ทุกนาที

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

ตัวอย่าง:

บรรทัดต่อไปนี้ในไฟล์ crontab จะกำหนดเวลางาน cron เพื่อเรียกใช้คำสั่ง/สคริปต์ทุก ๆ 30 นาทีที่ผ่านมา 5 ชั่วโมงทุกวันในสัปดาห์ตั้งแต่วันจันทร์ถึงวันเสาร์

* /30 5 * * 1-6สั่งการ/สคริปต์

นาที

ในฟิลด์นี้ เราระบุนาทีเมื่อเราต้องการให้ดำเนินการคำสั่ง มันถูกระบุตั้งแต่ 0 ถึง 59 * ในฟิลด์นี้หมายถึงการรันงานทุกนาที ในบรรทัด crontab ด้านบน */30 บอกให้งาน cron รันคำสั่ง/สคริปต์ที่ระบุทุก ๆ 30 นาที

ชั่วโมง

ในฟิลด์นี้ เราระบุชั่วโมงเมื่อเราต้องการให้ดำเนินการคำสั่ง มันถูกระบุตั้งแต่ 0 ถึง 23 * ในฟิลด์นี้หมายถึงการรันงานทุกชั่วโมง ในบรรทัด crontab ด้านบน ค่า 5 บอกให้งาน cron รันคำสั่ง/สคริปต์ที่ระบุทุก ๆ ห้าชั่วโมง

วันของเดือน

ในฟิลด์นี้ เราระบุวันของเดือนที่ต้องการให้ดำเนินการคำสั่ง มันถูกระบุจาก 1 ถึง 31 * ในช่องนี้หมายถึงทุกวัน ในบรรทัด crontab ด้านบน * บอกให้งาน cron รันคำสั่ง/สคริปต์ที่ระบุทุกวัน

เดือนของปี

ในฟิลด์นี้ เราระบุเดือนเฉพาะเมื่อเราต้องการให้ดำเนินการคำสั่ง มันถูกระบุตั้งแต่ 1 ถึง 12 * ในช่องนี้หมายถึงทุกเดือน ในบรรทัด crontab ด้านบน * บอกให้งาน cron รันคำสั่ง/สคริปต์ที่ระบุทุกเดือน

วันในสัปดาห์

ในฟิลด์นี้ เราระบุวันในสัปดาห์ที่ต้องการให้ดำเนินการคำสั่ง มันถูกระบุตั้งแต่ 0 ถึง 6 จากวันอาทิตย์ถึงวันเสาร์ (0 สำหรับวันอาทิตย์และ 6 สำหรับวันเสาร์) * ในช่องนี้หมายถึงทุกวันในหนึ่งสัปดาห์ ในบรรทัด crontab ด้านบน * บอกให้งาน cron รันคำสั่ง/สคริปต์ที่ระบุทุกวันในหนึ่งสัปดาห์

ตัวอย่างงาน Cron

นี่คือตัวอย่างบางส่วนของงาน cron:

เรียกใช้งาน cron ทุก 15 นาที

ในการกำหนดเวลางาน cron ให้ทำงานทุก ๆ 15 นาที ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

* /สิบห้า * * * *สั่งการ/สคริปต์

เรียกใช้งาน cron ตี 5 ทุกวัน

หากต้องการกำหนดเวลางาน cron ให้ทำงานตอนตี 5 ทุกวัน ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

0 5 * * *สั่งการ/สคริปต์

เรียกใช้งาน cron 5 โมงเย็นทุกวัน

หากต้องการกำหนดเวลางาน cron ให้ทำงานเวลา 17.00 น. ทุกวัน ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

0 17 * * *สั่งการ/สคริปต์

เรียกใช้งาน cron เวลา 9.00 น. ของวันแรกของทุกเดือน

หากต้องการกำหนดเวลางาน cron ให้ทำงานเวลา 9.00 น. ของวันแรกของทุกเดือน ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

0 9 1 * *สั่งการ/สคริปต์

เรียกใช้งาน cron ทุก ๆ ชั่วโมงทุกวันที่ 15 มีนาคม

หากต้องการกำหนดเวลางาน cron ทุกชั่วโมงในวันที่ 15 มีนาคม ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

0 * สิบห้า 3 *สั่งการ/สคริปต์

เรียกใช้งาน cron ทุก 5 ชั่วโมง

หากต้องการกำหนดเวลางาน cron ทุก 5 ชั่วโมง ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

0 * /5 * * *สั่งการ/สคริปต์

เรียกใช้งาน cron ทุก 15 นาที

ในการกำหนดเวลางาน cron ให้ทำงานทุก ๆ 15 นาที ให้เพิ่มบรรทัดด้านล่างในไฟล์ crontab:

* /สิบห้า * * * *

การใช้สตริง

สามารถใช้สตริงต่อไปนี้เพื่อกำหนดงานได้:

  1. @รายชั่วโมง: เพื่อดำเนินงานทุก ๆ ชั่วโมง กล่าวคือ 0 * * * *
  2. @เที่ยงคืน: เพื่อดำเนินงานวันละครั้ง กล่าวคือ 0 0 * * *
  3. @รายวัน: เท่ากับเที่ยงคืน
  4. @รายสัปดาห์: เพื่อดำเนินงานสัปดาห์ละครั้ง กล่าวคือ 0 0 * * 0
  5. @รายเดือน: เพื่อดำเนินงานเดือนละครั้ง กล่าวคือ 0 0 1 * *
  6. @รายปี: เพื่อดำเนินงานปีละครั้ง กล่าวคือ 0 0 1 1 *
  7. @รายปี: เช่นเดียวกับ @ รายปี
  8. @รีบูต: เพื่อดำเนินการงานหนึ่งครั้งในทุกการเริ่มต้น

ตัวอย่างเช่น หากต้องการเรียกใช้สคริปต์หรือคำสั่งทุกสัปดาห์ รายการในไฟล์ crontab จะเป็น:

@คำสั่งรายสัปดาห์/สคริปต์

ไดเรกทอรี Cron ที่กำหนดไว้ล่วงหน้า

มีไดเร็กทอรี cron ที่กำหนดไว้ล่วงหน้าใน Linux ซึ่งสคริปต์ที่เก็บไว้จะถูกดำเนินการโดยอัตโนมัติ หากเราวางสคริปต์ใดๆ ไว้ใต้ไดเร็กทอรีเหล่านี้ สคริปต์นั้นจะถูกดำเนินการโดยอัตโนมัติตามเวลาที่กำหนด

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

ตัวอย่างเช่น ในการรันสคริปต์เดือนละครั้ง คุณจะต้องวางไว้ใน /etc/cron.monthly

ดูงาน Cron

ดูงานสำหรับผู้ใช้ปัจจุบัน

ใช้คำสั่งต่อไปนี้เพื่อดูงาน cron ที่กำหนดเวลาไว้ทั้งหมดสำหรับผู้ใช้ปัจจุบัน:

$crontab-NS

ดูงานสำหรับผู้ใช้รูท

หากต้องการดูงานที่กำหนดเวลาไว้ทั้งหมดของผู้ใช้รูท ให้ออกคำสั่งต่อไปนี้ในเทอร์มินัล:

$แมว /ฯลฯ/crontab

คุณจะต้องเข้าสู่ระบบในฐานะผู้ใช้รูทหรือเรียกใช้คำสั่งเป็น sudo

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

หากต้องการดูงานที่กำหนดเวลาไว้ทั้งหมดของผู้ใช้รายใดรายหนึ่ง ให้ออกคำสั่งต่อไปนี้ใน Terminal แทนที่ด้วยชื่อผู้ใช้จริง:

$sudocrontab-ยู <ชื่อผู้ใช้> -NS

ในการรันคำสั่งนี้ คุณจะต้องมีสิทธิ์ sudo

ดูงาน cron รายชั่วโมง

หากต้องการดูงาน cron ทั้งหมดที่ได้รับการกำหนดค่าให้ทำงานเป็นรายชั่วโมง ให้ออกคำสั่งต่อไปนี้ใน Terminal:

$ลส -NS /ฯลฯ/cron.hourly

ดูงาน cron รายวัน

หากต้องการดูงาน cron ทั้งหมดที่ได้รับการกำหนดค่าให้ทำงานทุกวัน ให้ออกคำสั่งต่อไปนี้ใน Terminal:

$ลส -NS /ฯลฯ/cron.daily/

ดูงาน cron รายสัปดาห์

หากต้องการดูงาน cron ทั้งหมดที่ได้รับการกำหนดค่าให้ทำงานทุกสัปดาห์ ให้ออกคำสั่งต่อไปนี้ใน Terminal:

$ลส -NS /ฯลฯ/cron.weekly/

ดูงาน cron รายเดือน

หากต้องการดูงาน cron ทั้งหมดที่ได้รับการกำหนดค่าให้ทำงานเป็นรายเดือน ให้ออกคำสั่งต่อไปนี้ใน Terminal:

$ลส -NS /ฯลฯ/cron.monthly/

สำรองข้อมูลงาน Cron ทั้งหมด

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

$crontab-NS >backup_cron.txt

การลบงาน Cron ที่กำหนดเวลาไว้ทั้งหมด

ในการลบงาน cron ที่กำหนดเวลาไว้ทั้งหมด ให้ใช้แฟล็ก -r ดังนี้:

$crontab-NS

อนุญาต Cron

เราสามารถจำกัดการเข้าถึงคำสั่ง crontab ผ่านสองไฟล์: / etc/cron.allow และ / etc/cron.deny

  • /etc/cron.allow – เพิ่มผู้ใช้ (หนึ่งรายต่อบรรทัด) ที่คุณต้องการอนุญาตให้เข้าถึงคำสั่ง crontab ผู้ใช้เหล่านี้สามารถเรียกใช้งานตามกำหนดการได้
  • /etc/cron.deny – เพิ่มผู้ใช้ (หนึ่งรายต่อบรรทัด) ที่คุณต้องการปฏิเสธการเข้าถึงคำสั่ง crontab ผู้ใช้เหล่านี้ไม่สามารถเรียกใช้งานที่กำหนดเวลาไว้

เครื่องกำเนิดไวยากรณ์ Crontab

มีบางเว็บไซต์ที่อนุญาตให้สร้างไวยากรณ์สำหรับ crontabs เว็บไซต์เหล่านี้ช่วยให้สร้างนิพจน์ crontab ได้ง่ายขึ้นโดยไม่ต้องจำไวยากรณ์ แม้ว่าจะมีเว็บไซต์ต่าง ๆ สำหรับตัวสร้างไวยากรณ์เช่น crontabgenerator.com , crontab-generator.org , และ cronmaker.com . สิ่งที่ฉันชอบมากที่สุดและพบว่ามีประโยชน์คือ crontab.guru . ตามการป้อนข้อมูลของผู้ใช้ จะสร้างนิพจน์ crontab ที่คุณสามารถคัดลอกและวางลงในไฟล์ crontab ได้

บทสรุป

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