Crontab ใน Linux – พร้อมตัวอย่างและเครื่องมือแบบเรียลไทม์
เผยแพร่แล้ว: 2015-07-26มาสำรวจ crontab คำสั่ง และการดำเนินการต่างๆ ที่เกี่ยวข้องกับ Crontab
เราจะเรียนรู้วิธีกำหนดเวลางานโดยใช้ยูทิลิตี้ cron และสุดท้าย เราจะพูดถึงเครื่องมือออนไลน์บางอย่างที่ช่วยเราในการจัดรูปแบบและทดสอบคำสั่ง cron
ต้นทาง
Crontab ย่อมาจาก " cron table " คำว่า cron มาจากภาษากรีกคำว่า Chronos แปลว่า เวลา Crontab เป็นกระบวนการของภูตระบบที่จะทำงานและงานบางอย่างโดยอัตโนมัติตามเวลาที่กำหนด
กรณีการใช้งาน
Crontab มีประโยชน์ในการดำเนินการต่างๆ เช่น การจัดการการสำรองข้อมูลอัตโนมัติ การหมุนไฟล์บันทึก การซิงค์ไฟล์ระหว่างเครื่องระยะไกลและการล้างโฟลเดอร์ชั่วคราว เป็นต้น Crontab สามารถใช้กับงานประเภทใดก็ได้ แต่จะมีประโยชน์อย่างยิ่งเมื่อเราเริ่มจัดการกับ ประเภทของงานดูแลระบบ
เมื่อใช้ cron ผู้ดูแลระบบสามารถกำหนดเวลาให้งานทำงานตามเวลาและวันที่ระบุได้
ลองดูว่าเราจะตั้งค่านี้ได้อย่างไร
ไวยากรณ์ Crontab
ในการดำเนินการรายการคำสั่ง โปรแกรมอรรถประโยชน์ cron จะอ่านไฟล์การกำหนดค่า ในการตีความบรรทัดในตารางการกำหนดค่า crontab จะเป็นไปตามไวยากรณ์ของ Crontab Crontab มีหกฟิลด์ และห้าฟิลด์แรก (1-5) กำหนดวันที่และเวลาของการดำเนินการ ฟิลด์สุดท้าย กล่าวคือ ฟิลด์ที่ 6 อาจเป็นชื่อผู้ใช้และ/หรืองาน /job/command/script ที่จะดำเนินการ
* * * * * คำสั่ง USER_NAME/SCRIPT-TO-EXECUTE
บัญชีผู้ใช้นี้เป็นส่วนตัว
บัญชีผู้ใช้นี้เป็นส่วนตัว
│ │ │ │ |_________ วันในสัปดาห์ (0 – 6) (0 คือวันอาทิตย์ หรือใช้ชื่อ)
บัญชีผู้ใช้นี้เป็นส่วนตัว ____________ เดือน (1 – 12)* หมายถึง ทุกเดือน
บัญชีผู้ใช้นี้เป็นส่วนตัว ______________ วันของเดือน (1 – 31)* หมายถึง ทุกวัน
| ________________ ชั่วโมง (0 – 23)* หมายถึงทุกชั่วโมง
| ___________________ นาที (0 – 59) * หมายถึงทุกนาที
หมายเหตุ :
- เครื่องหมายดอกจัน (*) ใช้สำหรับจับคู่ค่าที่เป็นไปได้ทั้งหมดสำหรับฟิลด์ ตัวอย่างเช่น เครื่องหมายดอกจันในช่องชั่วโมงจะเท่ากับทุก ๆ ชั่วโมงหรือเครื่องหมายดอกจันในช่องเดือนจะเท่ากับทุกเดือน
- ชื่อผู้ใช้เป็นตัวเลือก (ใช้ได้เฉพาะในกรณีที่เป็นไฟล์ crontab ของระบบ)
ตัวอย่าง:
มาทำความเข้าใจไวยากรณ์ด้านบนพร้อมตัวอย่างกัน
1. กำหนดเวลาให้ cron ดำเนินการเวลา 5:00 น. ทุกวัน
0 5 * * * /scripts/job.sh2. กำหนดเวลาให้ cron ดำเนินการวันละสองครั้งเวลา 6:00 น. และ 18:00 น.
0 6,18 * * * /scripts/job.sh3. กำหนดเวลา cron เพื่อดำเนินการทุกนาที
* * * * * /scripts/job.sh4. กำหนดเวลา cron เพื่อดำเนินการทุกวันจันทร์เวลา 19.00 น.
0 19 * * mon /scripts/job.sh5. กำหนดเวลาให้ cron ดำเนินการทุกๆ 15 นาที
*/10 * * * * /scripts/job.sh6. กำหนดเวลา cron เพื่อดำเนินการในเดือนที่เลือก
* * * feb,jun,oct * /script/job.sh 7. รันเชลล์สคริปต์ /home/script/backup.sh ในวันที่ 4 มีนาคม เวลา 7:25 น.
25 7 4 3 * /home/script/backup.sh8. กำหนดเวลาให้ cron ดำเนินการทุก ๆ 30 วินาที
เนื่องจากเราไม่สามารถควบคุมวินาทีใน Crontab ได้ แต่เราสามารถทำได้โดยผ่านกระบวนการสองขั้นตอนด้านล่าง
- อันดับแรก มาจัดกำหนดการงานที่รันทุกนาทีกัน
* * * * * /home/scripts/script.sh- ตอนนี้ใช้คำสั่ง
sleepเพื่อหยุดการทำงานชั่วคราวเป็นเวลา 30 วินาที
* * * * * sleep 30; /home/scripts/script.shงานข้างต้นจะหยุดการดำเนินการเป็นเวลา 30 วินาที และจะกลับมาทำงานอีกครั้ง
ประเภทของไฟล์คอนฟิกูเรชัน Cron
ไฟล์คอนฟิกูเรชัน Cron มีสองประเภท:
ระบบ UNIX/Linux Crontab
สิ่งนี้ต้องการสิทธิ์รูทเพราะมักจะใช้สำหรับบริการระบบและงานที่สำคัญ ฟิลด์ที่หก (ในคำอธิบายไวยากรณ์ด้านบน) คือชื่อของผู้ใช้สำหรับคำสั่งที่จะเรียกใช้ มันให้ความสามารถของระบบ crontab เพื่อรันคำสั่งในฐานะผู้ใช้คนใดก็ได้
ผู้ใช้ Crontab
ผู้ใช้ยังสามารถติดตั้งงาน cron ของตนเองได้โดยใช้คำสั่ง crontab นอกจากนี้ ฟิลด์ที่หก (ในคำอธิบายไวยากรณ์ด้านบน) คือคำสั่งที่จะเรียกใช้ และคำสั่งทั้งหมดจะทำงานในฐานะผู้ใช้ที่สร้าง crontab ผู้ใช้แต่ละคนสามารถมีไฟล์ crontab ของตัวเองได้ และถึงแม้ว่าไฟล์เหล่านี้จะเป็นไฟล์ใน /var/spool/cron/ crontabs ก็ตาม ไม่ได้มีเจตนาให้แก้ไขโดยตรง เราจำเป็นต้องใช้คำสั่ง crontab เพื่อแก้ไขหรือตั้งค่างาน cron ของเราเอง
มันทำงานอย่างไร?
บริการ cron (daemon) ทำงานในพื้นหลังและตรวจสอบ (ทุก ๆ นาที) ไฟล์ /etc/crontab และ /etc/cron.*/ ไดเร็กทอรี นอกจากนี้ยังตรวจสอบไดเร็กทอรี /var/spool/cron/ คำสั่งจะดำเนินการโดย cron เมื่อฟิลด์นาที ชั่วโมง และเดือนตรงกับเวลาปัจจุบัน และอย่างน้อยหนึ่งฟิลด์สองวัน (วันของเดือน หรือวันในสัปดาห์) ตรงกับวันปัจจุบัน
คำสั่งพื้นฐาน
แสดงรายการงาน Cron ที่มีอยู่
เราสามารถแสดงรายการงาน Cron ทั้งหมดโดยไม่ต้องเปิดไฟล์การกำหนดค่า crontab โดยใช้คำสั่งด้านล่าง
crontab -lหากไม่มีงานที่มีอยู่จะส่งคืนผลลัพธ์เป็น
[geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#หากผู้ใช้ได้เพิ่มงานบางงานแล้ว จะแสดงดังนี้
[geekflare@localhost ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 am every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#ตาราง Cron เป็นแบบเฉพาะผู้ใช้ ซึ่งหมายความว่า คุณต้องเข้าสู่ระบบด้วยผู้ใช้เฉพาะเพื่อดูรายการตาราง cron
รายการ Cron สำหรับผู้ใช้เฉพาะ
หากต้องการแสดงรายการงานที่กำหนดเวลาไว้ของผู้ใช้รายอื่น ให้ใช้ตัวเลือกเป็น -u ( User ) และ -l ( List )
crontab -u another_username -l
ตัวอย่าง : crontab -u geekflare -l
เพิ่ม/แก้ไขรายการ Crontab
ในการแก้ไขรายการ crontab เราสามารถใช้ -e ตัวเลือกดังที่แสดงด้านล่าง

crontab -e
คำสั่งดังกล่าวจะเปิดโปรแกรมแก้ไข vi ที่คุณระบุรายละเอียดของงานและบันทึกไฟล์ เมื่อบันทึกแล้ว คุณสามารถตรวจสอบว่า cron ได้รับการกำหนดค่าหรือไม่ด้วย crontab -l
เพิ่ม/แก้ไขรายการ Crontab สำหรับผู้ใช้เฉพาะ
เราสามารถแก้ไข crontab สำหรับผู้ใช้รายอื่นโดยใช้คำสั่งด้านล่าง
crontab -u another_username -e ตัวอย่าง : crontab -u geekflare -e
ลบรายการ Crontab
ใช้พารามิเตอร์ <strong>-r</strong> กับ Crontab เพื่อลบงานที่กำหนดเวลาไว้ทั้งหมดโดยไม่ต้องยืนยันจาก crontab
crontab -r
หากคุณต้องการการยืนยันก่อนลบงานที่กำหนดเวลาไว้ ให้ใช้ตัวเลือก <strong>-i</strong> กับ -r ซึ่งจะแจ้งการยืนยันจากผู้ใช้ก่อนที่จะลบ crontab ของผู้ใช้
crontab -i -r [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?Crontab สตริงพิเศษ
นอกเหนือจากไวยากรณ์ข้างต้นที่เรากล่าวถึง เรายังสามารถใช้สตริงพิเศษแปดสตริงที่ Crontab จัดหาให้ ไม่เพียงแต่จะช่วยประหยัดเวลาของเราเท่านั้น แต่ยังช่วยปรับปรุงความสามารถในการอ่านอีกด้วย
| สตริงพิเศษ | คำอธิบาย |
@reboot | เรียกใช้ครั้งเดียวหลังจากเริ่มต้น |
@yearly | เรียกใช้ปีละครั้ง คือ 0 0 1 1 * |
@annually | เช่นเดียวกับ @yearly |
@monthly | เรียกใช้เดือนละครั้งเช่น 0 0 1 * * |
@weekly | เรียกใช้สัปดาห์ละครั้ง เช่น 0 0 * * 0 |
@daily | เรียกใช้วันละครั้ง เช่น 0 0 * * * |
@midnight | เช่นเดียวกับ @daily |
@hourly | เรียกใช้ชั่วโมงละครั้ง เช่น 0 * * * * |
ตัวอย่างสตริงพิเศษของ Crontab
1. Crontab เพื่อกำหนดเวลางานเป็นรายปี
@yearly /scripts/greeting.sh
เราสามารถดำเนินการข้างต้นเพื่อส่งคำอวยพรปีใหม่ โดยจะดำเนินการในนาทีแรกของทุกปี
2. Crontab เพื่อกำหนดเวลางานให้ดำเนินการเป็นรายเดือน
@monthly /scripts/cleanup.sh
เราสามารถดำเนินการอย่างใดอย่างหนึ่งข้างต้นเพื่อทำกิจกรรมการล้างข้อมูลทุกต้นเดือน
ในทำนองเดียวกัน เราสามารถใช้สตริงพิเศษอื่นๆ ของ Crontab เพื่อวัตถุประสงค์รายสัปดาห์ รายวัน และรายชั่วโมง
ไดเรกทอรี Cron
ผู้ดูแลระบบสามารถใช้กำหนดการ cron ทั่วทั้งระบบซึ่งอยู่ภายใต้ไดเร็กทอรี cron ที่กำหนดไว้ล่วงหน้าดังที่แสดงด้านล่าง
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
- /etc/cron.weekly
ตัวอย่างเรียลไทม์ของ Crontab
มาพูดถึงตัวอย่างแบบเรียลไทม์ที่ผู้ดูแลระบบหรือผู้เชี่ยวชาญด้านไอทีมักใช้กัน
ลบไฟล์เปล่าและไดเร็กทอรี
45 0 * * * geekflare find /tmp -type f -empty -delete
นิพจน์ cron ด้านบนจะพบไฟล์ว่างและไดเร็กทอรีจากไดเร็กทอรี /tmp และจะลบออก งานนี้จะทำงานเวลา 12.45 น. ของทุกวัน เราต้องระบุชื่อผู้ใช้เพื่อดำเนินการงานนี้ ในตัวอย่างข้างต้น ผู้ใช้ geekflare กำลังดำเนินการงาน cron
ดำเนินการหลายงานโดยใช้ cron เดียว
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
งาน/งานจำนวนมากสามารถแยกออกได้โดยใช้เครื่องหมายอัฒภาค ( ; ) และสามารถกำหนดให้กับนิพจน์ cron เดียวได้
เครื่องมือจัดรูปแบบและทดสอบ Cron
จนถึงตอนนี้ เราได้พูดถึงคำสั่งและไวยากรณ์ของ crontab เพื่อกำหนดเวลางาน แต่ถ้าคุณไม่ใช่ผู้ดูแลระบบและงานของคุณคือไม่ได้ตั้งค่า Cron เป็นประจำ คุณอาจไม่สามารถจำไวยากรณ์ได้และจะเปิดห้องสำหรับข้อผิดพลาด ไม่ต้องกังวลเรามีวิธีแก้ไขปัญหานี้
มีเครื่องมือการจัดรูปแบบ Cron หลายแบบออนไลน์
# 1. เครื่องมือสร้างงาน Cron
Cron Job Generator เป็น GUI ที่ใช้งานง่าย ซึ่งคุณสามารถระบุนาที วัน และเส้นทางของสคริปต์เพื่อสร้าง crontab
มาดูตัวอย่างแบบเรียลไทม์ที่ฉันต้องดำเนินการ /home/processMonitor.sh ทุก ๆ 5 นาทีระหว่างวันจันทร์ถึงวันศุกร์

ดังนั้นฉันจึงได้ไวยากรณ์ Cron ด้านล่างซึ่งฉันสามารถใส่ใน crontab ของฉันโดยดำเนินการ
crontab –e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Easycron
Easycron เป็นโปรแกรมจัดตารางเวลางาน cron บนเว็บที่มีประโยชน์ เราสามารถสร้างงาน cron ได้โดยการระบุ URL ที่จะโทร เราสามารถกำหนดเวลาที่ควรดำเนินการได้ นอกจากนี้เรายังสามารถระบุนิพจน์ cron หรือเพิ่มด้วยตนเองจากรูปแบบคำอธิบาย ที่สำคัญ เราสามารถเลือกใช้การพิสูจน์ตัวตน HTTP พื้นฐานสำหรับการรักษาความปลอดภัยชั้นเล็กๆ ได้

ไม่เพียงแค่นี้ แต่ Easycron ยังสามารถใช้เพื่อบรรลุวัตถุประสงค์อื่น เช่น นิพจน์ Cron มาตรฐาน บันทึกการดำเนินการงาน Cron การแจ้งเตือนทางอีเมล บันทึกความล้มเหลวแยกต่างหาก เป็นต้น
# 3. เครื่องกำเนิด Crontab
Crontab Generator เป็นเครื่องมือที่มีประโยชน์อีกอย่างหนึ่งในการสร้าง crontab และด้วยเครื่องมือนี้ คุณสามารถเพิ่มได้หากต้องการบันทึกเอาต์พุต cron ลงในไฟล์หรือส่งไปยังอีเมล

# 4. Crontab Guru
Crontab Guru เป็นโปรแกรมแก้ไขนิพจน์กำหนดการ cron ออนไลน์อย่างง่าย นอกจากนี้ยังให้วิธีการที่เป็นประโยชน์ในการตรวจสอบ cronjob ของคุณ สิ่งที่เราต้องทำคือคัดลอกคำสั่งที่ให้มาและต่อท้ายคำจำกัดความ crontab ในกรณีที่งาน cron ล้มเหลวหรือไม่เริ่มทำงาน คุณจะได้รับอีเมลแจ้งเตือน
ในตัวอย่างด้านล่าง งานจะดำเนินการเวลา 04:05 น. ทุกวัน ทุกเดือน และทุกสัปดาห์

# 5. เครื่องทดสอบ CRON
CRON Tester ช่วยให้เราสามารถทดสอบคำจำกัดความของเวลา / วันที่ cron อาจมีสถานการณ์ที่เราต้องถอดรหัสไวยากรณ์ cron ที่มีอยู่สำหรับการแก้ไขปัญหาหรือเพียงแค่ต้องการทดสอบ
ในการทำเช่นนั้น เราสามารถใช้เครื่องมือนี้ได้ สิ่งที่เราต้องทำคือคัดลอกและวางนิพจน์ cron ของเราในฟิลด์คำจำกัดความ cron จากนั้นเลือกจำนวนการวนซ้ำแล้วคลิก ทดสอบ เพื่อดูวันที่ต่างๆ ที่จะรัน
มาตรวจสอบนิพจน์ cron 4 3 */2 * * ซึ่งควรรันเวลา 03:04(AM) ทุกสองวันกัน มาตรวจสอบด้วยเครื่องมือทดสอบ cron

บทสรุป
ฉันหวังว่าข้างต้นจะช่วยให้คุณเข้าใจ Crontab และตั้งค่างาน cron ได้ดีขึ้น การจัดกำหนดการงานผ่าน Cron เป็นหนึ่งในหลาย ๆ งานที่ทำโดย Linux Admin หากคุณสนใจที่จะเรียนรู้ทักษะขั้นสูงลองดูหลักสูตรนี้
