ในระบบปฏิบัติการ Unix สามารถเปิดโปรแกรมผู้ใช้ตามเวลาที่ผู้ใช้กำหนดได้ เพื่อจุดประสงค์นี้จึงถูกนำมาใช้ โปรแกรมครอนซึ่งรับคำสั่งจากผู้ใช้และดำเนินการตามสคริปต์ที่ได้รับ ลูกค้าของเราสามารถใช้คุณสมบัตินี้เพื่อทำงานตามระยะเวลาได้
วิธีการตั้งค่า cron ในบัญชีส่วนตัวของคุณ (สำหรับภาษียูนิกซ์)
เนื่องจากโปรแกรม PHP บางโปรแกรมไม่สามารถทำงานผ่าน SAPI CLI ได้โดยไม่ต้องแก้ไขล่วงหน้า คุณจึงสามารถรันโปรแกรมเหล่านั้นได้ ตกลง- ตัวอย่างเช่น:
/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123หากสคริปต์ใช้ฟังก์ชัน จำเป็นต้อง, รวมและพวกเขาบ่งชี้ เส้นทางสัมพัทธ์จากนั้นที่จุดเริ่มต้นของสคริปต์ที่ดำเนินการให้ใช้การเรียกฟังก์ชัน chdir()ซึ่งจะตั้งค่าไดเร็กทอรีการทำงานปัจจุบัน
วิธีรับข้อความแสดงข้อผิดพลาดจากโปรแกรมที่รันโดย cron
หากคุณพบข้อผิดพลาดขณะรันโปรแกรมที่รันจาก cron คุณอาจต้องการได้รับข้อความแสดงข้อผิดพลาดเพื่อให้คุณสามารถตรวจสอบประสิทธิภาพของงานที่รันเป็นระยะได้อย่างเต็มที่ เมื่อต้องการทำเช่นนี้ ให้วางบรรทัดต่อไปนี้ที่จุดเริ่มต้นของสคริปต์ cron:
[email protected]แน่นอน, ที่อยู่@domain.ruคุณต้องแทนที่ด้วยที่อยู่อีเมลจริงที่จะใช้ส่งการแจ้งเตือน หากคุณต้องการได้รับข้อความแสดงข้อผิดพลาดไปยังที่อยู่หลายแห่ง ให้ระบุที่อยู่เหล่านี้ทั้งหมดโดยคั่นด้วยเครื่องหมายจุลภาค
โปรดทราบว่า cron จะส่งเอาต์พุตสคริปต์ที่ทำงานอยู่ทางไปรษณีย์ ตัวอย่างเช่น หากคุณเขียนสคริปต์ที่พิมพ์บรรทัด “Hello, world” และเรียกใช้ผ่าน cron คุณจะได้รับอีเมลพร้อมบรรทัด “Hello, world” ทุกครั้งที่ cron เรียกใช้สคริปต์ดังกล่าว
เพื่อหลีกเลี่ยงปัญหานี้ ตัวอย่างเช่น เมื่อคุณไม่ต้องการเอาต์พุตข้อความจากสคริปต์ คุณจะต้องเพิ่มอักขระ
> /dev/null 2>&1บรรทัดที่สมบูรณ์สำหรับ cron จะมีลักษณะดังนี้:
0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1เราขอแนะนำให้ตรวจสอบไวยากรณ์ที่ถูกต้องของสคริปต์ที่คุณตั้งค่าให้ทำงานผ่าน cron สคริปต์อาจมีข้อผิดพลาด อาจทำงานไม่เหมือนกันเมื่อทำงานผ่านเว็บเซิร์ฟเวอร์และผ่าน cron และอื่นๆ เพื่อให้แน่ใจว่าสคริปต์จะทำงานอย่างถูกต้องผ่าน cron ให้ตรวจสอบด้วยคำสั่งนี้ก่อน ยูนิกซ์เชลล์:
/usr/local/bin/php -l script.phpหากไม่มีข้อผิดพลาดในสคริปต์ คุณจะเห็นข้อความ “ไม่พบข้อผิดพลาดทางไวยากรณ์ใน script.php”
ข้อจำกัด
สำหรับโปรแกรมที่เรียกใช้ผ่าน cron ข้อจำกัดเดียวกันกับทรัพยากรที่ใช้จะมีผลกับกระบวนการที่เรียกใช้โดยผู้ใช้ในยูนิกซ์เชลล์ มันเกี่ยวกับเกี่ยวกับข้อจำกัดเวลาดำเนินการของโปรแกรม, ตัวเลข หน่วยความจำที่มีอยู่ข้อจำกัดขนาดไฟล์ และอื่นๆ
ฉันได้ยินมามากมายเกี่ยวกับวิธีที่ Linux มีตัวกำหนดเวลางาน cron ที่มีประโยชน์ อย่างไรก็ตาม ฉันไม่จำเป็นต้องใช้มัน และฉันไม่ต้องการที่จะเข้าใจการตั้งค่าของมัน... คอนโซล ตัวอักษรภาษาอังกฤษจำนวนมาก... มันน่ากลัว แต่โชคดีที่ความกลัวของฉันก็ไร้ผล - ทุกอย่างเรียบง่ายตั้งแต่พื้นฐานเลย บทความนี้จะกล่าวถึงวิธีตั้งค่าการทำงานของสคริปต์ของคุณตามกำหนดเวลาและเราจะติดตั้ง "นกกาเหว่า" เป็นตัวอย่าง
ก่อนอื่น เล็กน้อยเกี่ยวกับวิธีการทำงานโดยทั่วไป
เมื่อระบบเริ่มทำงาน cron daemon จะเริ่มทำงาน สามารถควบคุมได้ (หยุด/เริ่ม/ตรวจสอบสถานะ) ด้วยคำสั่ง: sudo service cron (หยุด/เริ่ม/สถานะ) แต่นี่ไม่ค่อยจำเป็น
cron daemon เองจะเข้าสู่โหมดสลีปเกือบตลอดเวลา และลืมตาขึ้นเล็กน้อยนาทีละครั้งเพื่อตรวจสอบงานในเวลานี้ หากไม่มีงานก็จะเข้าสู่โหมดไฮเบอร์เนตอีกครั้ง
งานจะอยู่ในไฟล์ที่มีชื่อเท่ากับชื่อผู้ใช้ และตัวไฟล์เองจะอยู่ในโฟลเดอร์ /var/spool/cron/crontabs โฟลเดอร์นี้ได้รับการปกป้องจากการรบกวนจากภายนอก และมีเพียงผู้ใช้ขั้นสูงเท่านั้นที่สามารถเข้าถึงได้ แต่ผู้ใช้แต่ละคนสามารถกำหนดเวลาสำหรับงานของตนได้โดยไม่ต้องรู้รหัสผ่านรูท (superuser)
ถึง ตั้งค่าครอนสำหรับผู้ใช้ทั่วไป เพียงพิมพ์:
หากคุณต้องการสร้างงานให้กับผู้ใช้รายอื่น ให้เปิดใช้งานด้วยคำสั่ง:
sudo crontab -u ผู้ใช้ -e
เราเขียนแทนผู้ใช้ ผู้ใช้ที่ต้องการเช่น รูท
เมื่อคุณเปิดตัวครั้งแรกจะมีคำถามเกี่ยวกับตัวแก้ไข... ฉันชอบนาโน มันง่ายและทำงานโดยไม่มี GUI
ไวยากรณ์สำหรับงานนั้นง่ายมาก ลองดูตัวอย่างจากภาพหน้าจอของการเปิดตัวนกกาเหว่า:
0 */1 * * * /home/zegi/bin/kuku
งานมี 2 ฟิลด์หลัก: 0 */1 * * * - ระบุเวลาที่คำสั่งจะถูกทริกเกอร์ และ /home/zegi/bin/kuku คือเส้นทางไปยังสคริปต์ที่อธิบายคำสั่ง
ไม่ควรมีปัญหาใดๆ กับที่อยู่ในสคริปต์ (zegi คือชื่อผู้ใช้... อย่าลืมใส่ของคุณ) แต่เราต้องอธิบายวิธีตั้งเวลา cron สำหรับการเรียกใช้สคริปต์
โดยรวมแล้วเรามีเซลล์อินพุต 5 เซลล์ซึ่งคั่นด้วยช่องว่าง
1 - นาที (ตัวเลขตั้งแต่ 0 ถึง 59)
2 - ชั่วโมง (ตั้งแต่ 0 ถึง 23)
3 - วันของเดือน (ตั้งแต่ 1 ถึง 31)
เดือนที่ 4 ของปี (ตั้งแต่ 1 ถึง 12... เช่น กุมภาพันธ์ คือ 2)
5 - วันในสัปดาห์ (ตั้งแต่ 1 ถึง 7 ใช้สัปดาห์ตะวันตกเมื่อเริ่มต้นคือวันอาทิตย์ เช่น อาทิตย์-1, จันทร์-2, อังคาร-3, พุธ-4, พฤหัสบดี-5, ศุกร์-6, วันเสาร์ - 7)
ต้องกรอกแต่ละเซลล์ หากคุณต้องการให้ดำเนินการคำสั่งทุกเดือน ให้ตั้งค่า * ในสนามที่ 4 เช่นเดียวกับฟิลด์อื่นๆ
กลับไปที่ตัวอย่างนกกาเหว่าเมื่อสคริปต์ทำงานทุกชั่วโมง เพื่อกำหนดความถี่ในการใช้งาน / - ตัวอย่างเช่น หากคุณต้องการให้งานดำเนินการทุกๆ 5 นาทีในวันจันทร์ ให้ตั้งค่า:
หากคุณต้องการให้งานถูกดำเนินการทุกชั่วโมง คุณจะต้องกำหนดนาทีที่เจาะจง หากคุณทิ้งเครื่องหมายดอกจัน (* */1 * * *) เม็ดมะยมจะดำเนินการทุกนาที - เนื่องจากตรงตามเงื่อนไข: มีการตรวจสอบทั้ง 5 เซลล์และค่าของมันสอดคล้องกับเวลาปัจจุบัน (นาที - มันไม่สำคัญ ชั่วโมง - ทุกชั่วโมง ไม่ใช่แค่บางชั่วโมง)
เครื่องหมายทับจะต้องนำหน้าด้วยเครื่องหมายดอกจันเสมอ ตัวอย่างเช่น การกำหนดการดำเนินการทุกนาทีเริ่มตั้งแต่วันที่ 30 ด้วยการป้อน 30/1 จะไม่ทำงาน
หากจำเป็นสำหรับการทำงานที่ไม่เป็นวงกลม แต่หลายครั้งค่าจะถูกเขียนโดยคั่นด้วยเครื่องหมายจุลภาค
เช่น คุณต้องทำงานให้เสร็จในวันธรรมดาเวลา 12.00 น. และ 18.00 น. จากนั้นจะมีลักษณะดังนี้:
* 12,18 * * 2,3,4,5,6
เมื่อคุณแก้ไขงานเสร็จแล้ว อย่าลืมบันทึกการเปลี่ยนแปลง (Ctrl+O > Enter) จากนั้นคุณก็สามารถออกได้ (Ctrl+x)
Cron ควรแจ้งว่ามีงานใหม่ปรากฏขึ้นและพร้อมที่จะดำเนินการโดยเขียนว่า: “crontab: กำลังติดตั้ง crontab ใหม่”
คุณสามารถดูงานที่สร้างขึ้น (บางทีคุณอาจไม่ได้ทำอะไรเพื่อตัวคุณเอง แต่ผู้ดูแลระบบเครือข่ายกำหนดค่าบางอย่างให้กับคุณ) ด้วยคำสั่ง:
และสุดท้ายฉันก็เอง สคริปต์นกกาเหว่าซึ่งนกกาเหว่าทุกชั่วโมง:
#!/bin/bash
ชั่วโมง=`วันที่ +%l`
ในขณะที่ [ $h -gt 0 ]
ทำ
เล่น ~/kukushka.wav
ชั่วโมง=$[$h-1]
เสร็จแล้ว
คุณสามารถดาวน์โหลดเสียงนกกาเหว่าด้วยคำสั่ง:
รับ http://dl.dropbox.com/u/24844052/tuksik/kukushka.wav
การเล่นรวมอยู่ในแพ็คเกจ sox ใน Ubuntu คุณสามารถติดตั้งได้ด้วยคำสั่ง
บ่อยครั้งมากบนระบบที่คล้ายกับ Linux คุณอาจต้องทำให้กระบวนการบางอย่างเป็นไปโดยอัตโนมัติ มีการใช้ตัวกำหนดเวลาพิเศษสำหรับสิ่งนี้ หนึ่งในที่มีชื่อเสียงที่สุดคือ Cron การตั้งค่าที่จะกล่าวถึงในบทความนี้
ครอนคืออะไร?
ชื่อของโปรแกรมมาจากภาษากรีกว่า chronos ซึ่งแปลว่าเวลา ซึ่งเป็นตรรกะจริงๆ หน้าที่ของปีศาจคือการ บางช่วงเวลาดำเนินการคำสั่งที่เขียนลงไป กระบวนการนำไปใช้นั้นขึ้นอยู่กับการตรวจสอบตารางคราวน์และเปรียบเทียบกับและเวลา
ไฟล์ crontab
องค์ประกอบที่สำคัญที่สุดในการตั้งค่า Cron คือไฟล์กำหนดค่า crontab ประกอบด้วยคำสั่งดำเนินการและเส้นทางไปยังสคริปต์ พวกเขาทั้งหมดทำงานเป็น superuser เนื่องจากไฟล์เหล่านี้อยู่ในไดเร็กทอรี /etc/cron.d จึงควรกำหนดค่าไฟล์เหล่านี้ที่นั่น
สำหรับทุกคน ผู้ใช้แต่ละรายระบบใช้ไฟล์ crontab ของตัวเอง
Linux รุ่นต่างๆ จะใช้ไดเร็กทอรีที่แตกต่างกันในการจัดเก็บ การตั้งค่าแบบกำหนดเอง- สำหรับ RedHat นี่คือ var / สปูล/ครอน บน Debian และ Ubuntu นี่จะเป็น var/spool/cron/crontabs และ var/spool/cron/tabs ใน SUSE
รายการคำสั่งสำหรับจัดการ crontab
Cron มีชุดคำสั่งพิเศษที่สามารถใช้เพื่อควบคุมตัวกำหนดตารางเวลา จำเป็นต้องใช้ร่วมกับ crontab นี่เป็นรายการเล็กๆ น้อยๆ:
- -คุณชื่อผู้ใช้ ตั้งค่าผู้ใช้ที่จะประมวลผลงานและการตั้งค่า การดำเนินการเพิ่มเติม- หากคุณละเว้น ได้รับกุญแจผู้ใช้เริ่มต้นจะถูกตั้งค่า
- -ล. แสดงรายการงานปัจจุบัน
- -e เปิดตัวแก้ไขสำหรับตัวกำหนดเวลางาน
- -ร. ลบงานที่มีอยู่ทั้งหมดออกจากรายการ
รูปแบบงาน
ดังที่ได้กล่าวไปแล้ว การตั้งค่า Cron ประกอบด้วยการระบุคำสั่งต่างๆ เข้าไป ไฟล์พิเศษ- ดูเหมือนว่า รายการง่ายๆประกอบด้วยหกคอลัมน์:
- อันแรกระบุจำนวนนาที ช่วงที่ใช้ได้คือตั้งแต่ 0 ถึง 59 คุณสามารถใช้ค่า ช่วง และได้หลายค่า อักขระพิเศษ;
- คอลัมน์ที่สอง - ชั่วโมง สามารถใช้ค่าตั้งแต่ 0 ถึง 23
- วันถัดไป ที่นี่คุณสามารถระบุตัวเลขตั้งแต่ 1 ถึง 31
- ที่สี่คือเดือน ค่าต่ำสุด 1, สูงสุด - 12;
- ห้า - สัปดาห์ 0 หรือ 7 ตรงกับวันอาทิตย์
- คำสั่งสุดท้ายคือคำสั่งนั้นเอง
ตามที่กล่าวไว้ คุณสามารถระบุอักขระพิเศษ "*" หรือ "/" ในไฟล์ได้ ตัวอย่างเช่น รายการดังกล่าวคือ 23 */2 *** echo “Run” หมายความว่าทุก ๆ ชั่วโมงและ 23 นาทีคำจารึก “Run” จะปรากฏขึ้น
คุณสมบัติของไฟล์ crontab
เมื่อตั้งค่า Cron คุณต้องจำไว้ว่ามีคุณสมบัติเฉพาะที่ควรคำนึงถึงเมื่อกำหนดค่า:
- ทุกไฟล์จะต้องสิ้นสุด บรรทัดว่าง, มิฉะนั้น จุดสุดท้ายอาจถูกละเลยและบางครั้งไฟล์ทั้งหมด
- ไฟล์ที่อยู่ในไดเร็กทอรีที่มีจุดอยู่ในชื่อจะถูกละเว้นโดยตัวกำหนดตารางเวลาเช่นกัน
- คุณสามารถใช้สัญลักษณ์ปอนด์ “#” ในไฟล์กำหนดค่าได้ ใช้เพื่อทำเครื่องหมายบรรทัดพร้อมความคิดเห็น สิ่งนี้มีประโยชน์มากสำหรับการอธิบายงานและคำสั่งที่กำหนดเวลาไว้
ตัวแปรเพิ่มเติม
เมื่อตั้งค่า Cron คุณสามารถใช้ค่าพิเศษและตัวย่อในคำสั่งได้ ตัวอย่างเช่น คุณสามารถใช้รายการต่อไปนี้เพื่อระบุวันในสัปดาห์:
- อาทิตย์ - วันอาทิตย์;
- จันทร์ - จันทร์;
- อังคาร - อังคาร;
- พุธ - สิ่งแวดล้อม;
- พฤ - พฤหัสบดี;
- ศุกร์ - ศุกร์;
- วันเสาร์-วันเสาร์
นอกจากนี้ยังมีค่าตัวอักษรแยกต่างหากสำหรับเดือน - ม.ค. ก.พ. มี.ค. เม.ย. พ.ค. มิ.ย. ก.ค. ส.ค. ก.ย. ต.ค. พ.ย. ธ.ค.
นอกจากนี้ยังมีตัวแปรแยกต่างหากสำหรับการกำหนดค่า Cron ที่สามารถแทนที่บรรทัดคำสั่งทั้งหมดได้:
- @รีบูต คำสั่งจะทำงานทุกครั้งที่คุณเริ่มคอมพิวเตอร์
- @รายปี. งานนี้จะเปิดตัวปีละครั้ง สัญกรณ์ที่เทียบเท่าในรูปแบบตัวเลขอาจเป็น: 0 0 1 1 * คำพ้องความหมายสามารถเขียนเป็น @annually;
- @รายเดือน. ตามที่คุณสามารถเดาได้จากชื่อ ตัวแปรนี้จะรันคำสั่งเดือนละครั้ง อะนาล็อกตัวเลขของมันคือ 0 0 1 * *;
- @รายสัปดาห์. ตัวแปรนี้จะทำงานทุกสัปดาห์
- @รายวัน. วันละครั้ง;
- @เที่ยงคืน. การเปิดตัวจะมีขึ้นในเวลาเที่ยงคืน
- @รายชั่วโมง. ทุกชั่วโมง.
การตั้งค่า Cron บน Centos 7
กระบวนการติดตั้งและกำหนดค่านั้นไม่ได้แตกต่างจากกระบวนการอื่นที่คล้ายคลึงกันมากนัก การแจกแจงลินุกซ์- ก่อนที่จะตั้งค่า Cron บน Centos คุณต้องติดตั้งแพ็คเกจ cronie บนระบบของคุณก่อน คุณสามารถทำได้โดยใช้ คำสั่งยำติดตั้งโครนี่ หากต้องการสร้างไฟล์พร้อมคำแนะนำ คุณต้องเรียกใช้ crontab -e ในเทอร์มินัล ทั้งหมด การตั้งค่าระบบไฟล์ Cron จะถูกเก็บไว้ที่ /var/spool/cron/username
ตัวอย่างที่เป็นประโยชน์สำหรับการสร้างงานที่ทำซ้ำบ่อยๆ
Cron สามารถกำหนดค่าให้ครอบคลุมเกือบทุกความต้องการของผู้ใช้
- 00 09-17 * * 1 - 5 /path/ ถึงทีม/ มงกุฏ. คำสั่งนี้จะดำเนินการตามกำหนดเวลาโดยอัตโนมัติทุกวันทำการตั้งแต่ 9 ถึง 5 ทุกนาทีแรก
- 00 9.17 * * * /path/ ถึงทีม/ มงกุฏ ในตัวอย่างนี้ คำสั่งจะถูกดำเนินการวันละสองครั้ง ตัวแรกเวลา 9.00 น. ครั้งที่สองเวลา 5.00 น. เครื่องหมาย "*" ระบุว่าคำสั่งจะดำเนินการทุกวัน เดือน และปี
- อย่าลืมเกี่ยวกับตัวแปรเชิงสัญลักษณ์ด้วย ตัวอย่างเช่น @monthly จะรันงานทุกเดือนในนาทีแรกของชั่วโมงแรกของวันแรก และ @daily จะเปิดตัวทุกวัน
ผู้ดูแลระบบและผู้ใช้ทั่วไปมักต้องทำระบบอัตโนมัติ งานต่างๆในการบำรุงรักษาและทำงานกับ Linux โดยใช้สคริปต์ สะดวกมาก คุณเพียงแค่เรียกใช้สคริปต์และทำทุกอย่างที่จำเป็นโดยที่คุณไม่ต้องดำเนินการใดๆ ขั้นตอนต่อไปในเส้นทางนี้คือการกำหนดค่าการเรียกใช้สคริปต์ที่ต้องการโดยอัตโนมัติ เวลาที่เหมาะสม.
มันเป็นงานเหล่านี้ที่ Linux ใช้ บริการระบบครอน นี่คือตัวกำหนดตารางเวลาที่ช่วยให้คุณสามารถรันสคริปต์ที่คุณต้องการได้ชั่วโมงละครั้ง วันละครั้ง สัปดาห์หรือเดือน ตลอดจนเวลาใดก็ได้ที่คุณระบุหรือตามช่วงเวลาใดก็ได้ โปรแกรมนี้มักจะถูกใช้โดยบริการอื่น ๆ ระบบปฏิบัติการ- ในบทความนี้เราจะดูวิธีกำหนดค่า Cron และดูตัวอย่างหลักที่ใช้บ่อย
ในความเป็นจริง Cron เป็นบริการเช่นเดียวกับบริการ Linux อื่นๆ ส่วนใหญ่ โดยเริ่มต้นเมื่อเริ่มต้นระบบและทำงานเข้ามา พื้นหลัง- หน้าที่หลักคือดำเนินกระบวนการที่ถูกต้องในเวลาที่เหมาะสม มีหลายอย่าง ไฟล์การกำหนดค่าซึ่งเขาใช้ข้อมูลเกี่ยวกับสิ่งที่ต้องทำและเมื่อใด บริการจะเปิดไฟล์ /etc/crontab ซึ่งมีข้อมูลที่จำเป็นทั้งหมด บ่อยครั้งในการแจกแจงสมัยใหม่มีการกำหนดให้เรียกใช้ยูทิลิตี้ run-parts ซึ่งเปิดตัว สคริปต์ที่จำเป็นจากโฟลเดอร์ต่อไปนี้:
- /etc/cron.นาที- ทุกนาที
- /etc/cron.hourly- ทุกชั่วโมง
- /etc/cron.daily- ทุกวัน;
- /etc/cron.weekly- ทุกสัปดาห์
- /etc/cron.monthly- ทุกเดือน
โฟลเดอร์เหล่านี้ควรมีสคริปต์ที่ต้องดำเนินการตามช่วงเวลาที่กำหนด สคริปต์ต้องมีสิทธิ์ดำเนินการและชื่อต้องไม่มีจุด ทำให้การทำงานกับตัวกำหนดเวลาเป็นเรื่องง่ายมากสำหรับผู้ใช้ใหม่ นอกจากนี้ในไฟล์ crontab ยังมีการเปิดตัวคำสั่ง anacron ซึ่งทำงานเหมือนกับ cron เฉพาะมีไว้สำหรับงานที่ต้องทำครั้งเดียวในระยะเวลานาน เช่น วันละครั้ง สัปดาห์ เดือน ปี
ช่วยให้คุณสามารถดำเนินการได้แม้ว่าคอมพิวเตอร์จะไม่ทำงานเสมอไปและปิดอยู่เป็นครั้งคราว วันครบกำหนดของงาน ครั้งสุดท้ายถูกเขียนลงในไฟล์ /var/spool/anacron จากนั้นในครั้งต่อไปที่ anacron เริ่มทำงาน มันจะตรวจสอบว่าได้เริ่มทำงานแล้วหรือไม่ กระบวนการที่จำเป็นในเวลาที่เหมาะสม และหากไม่เป็นเช่นนั้น ก็ให้เปิดใช้งาน บริการ cron นั้นได้รับการออกแบบมาให้ทำงานในระหว่างวันหรือตามกำหนดเวลาและวันที่ที่แม่นยำยิ่งขึ้น
การตั้งค่า Cron
หากต้องการตั้งเวลา วันที่ และช่วงเวลาที่คุณต้องการปฏิบัติงาน ให้ใช้ ไวยากรณ์พิเศษไฟล์ cron และ ทีมพิเศษ- แน่นอน คุณสามารถแก้ไขไฟล์ /etc/crontab ได้ตลอดเวลา แต่ไม่แนะนำ มีคำสั่ง crontab แทน:
ขอแนะนำให้ดำเนินการด้วยตัวเลือก -e เสมอ จากนั้นโปรแกรมแก้ไขข้อความเริ่มต้นของคุณจะถูกนำมาใช้ในการแก้ไขกฎ ทีมงานเปิดรับท่านแล้ว ไฟล์ชั่วคราวซึ่งมีกฎ cron ปัจจุบันทั้งหมดอยู่แล้ว และคุณสามารถเพิ่มกฎใหม่ได้ หลังจากคำสั่ง cron เสร็จสิ้น ไฟล์จะถูกประมวลผลและกฎทั้งหมดจะถูกเพิ่มไปที่ /var/spool/cron/crontabs/username และกระบวนการที่เพิ่มเข้ามาจะถูกเรียกใช้จากผู้ใช้ที่คุณเพิ่มเข้ามาทุกประการ
ดังนั้นคุณต้องใช้ความระมัดระวังที่นี่ และหากคุณต้องการรันสคริปต์ในฐานะรูท crontab จะต้องดำเนินการในฐานะรูท ไม่ใช่ในฐานะผู้ใช้ ซึ่งมักจะทำให้เกิดปัญหา
ไวยากรณ์ของ crontab
ดังที่ได้กล่าวไปแล้ว เวลาถูกตั้งค่าในรูปแบบพิเศษ มาดูไวยากรณ์สำหรับการตั้งค่า cron งานเดียว:
นาที ชั่วโมง วัน เดือน วัน_สัปดาห์ /path/to/executable/file
ต้องบอกว่าจำเป็นต้องเขียน เส้นทางเต็มให้กับคำสั่ง เนื่องจากสำหรับคำสั่งที่ทำงานเป็น cron ตัวแปรสภาพแวดล้อม PATH จะแตกต่างออกไป และบริการจะไม่สามารถค้นหาคำสั่งของคุณได้ นี่เป็นสาเหตุที่พบบ่อยเป็นอันดับสองของปัญหากับ Cron วันที่และเวลาระบุด้วยตัวเลขหรือสัญลักษณ์ "*" สัญลักษณ์นี้หมายความว่าจะต้องดำเนินการทุกครั้ง หากอยู่ในฟิลด์แรก - จากนั้นทุกนาทีเป็นต้น ทีนี้มาดูตัวอย่างกันดีกว่า
ตัวอย่างการตั้งค่า cron
ขั้นแรก คุณสามารถดูงาน cron สำหรับ superuser ได้ ซึ่งคุณสามารถใช้ตัวเลือก -l ได้:
คุณสามารถลบงานที่มีอยู่ทั้งหมดด้วยคำสั่ง -r:
สมมติว่าเราจำเป็นต้องรันสคริปต์ของเราที่ /usr/local/bin/serve ในฐานะ superuser สคริปต์การบำรุงรักษาบางประเภท ตัวอย่างที่ง่ายที่สุดคือการรันทุกนาที:
* * * * * /usr/local/bin/serve
0 * * * * /usr/local/bin/serve
เราเปิดตัวที่ศูนย์นาทีของศูนย์ชั่วโมง ทุกวัน เวลา 12.00 น.:
0 0 * * * /usr/local/bin/serve
0 0 1 * * /usr/local/bin/serve
คุณสามารถทำได้ทุกวันเช่นวันที่ 15:
0 0 15 * * /usr/local/bin/serve
ในวันแรกของสัปดาห์ของเดือนแรกของปี 0 ชั่วโมง 0 นาที:
0 0 * 1 0 /usr/local/bin/serve
หรือวันที่ศูนย์ของสัปดาห์ในแต่ละเดือน:
0 0 * * 0 /usr/local/bin/serve
คุณสามารถเลือกนาที ชั่วโมง และวันในสัปดาห์ได้ เช่น 15.30 น. ของวันอังคาร:
30 15 * * 2 /usr/local/bin/serve
วันจันทร์ถือเป็นวันแรก วันอาทิตย์เป็นวันที่เจ็ดหรือวันที่ศูนย์ คุณยังสามารถเขียนชื่อย่อสำหรับวันในสัปดาห์ได้ เช่น วันอาทิตย์ - วันอาทิตย์:
30 15 * * อาทิตย์ /usr/local/bin/serve
เพื่อระบุช่วงเวลาที่เฉพาะเจาะจง คุณต้องใช้สัญลักษณ์ "-" เช่น ทุกชั่วโมง ตั้งแต่เจ็ดโมงเช้าถึงเจ็ดโมงเย็น:
0 7-19 * * * /usr/local/bin/serve
หากคุณต้องการรันคำสั่งหลายครั้ง คุณสามารถใช้ตัวคั่น "," ได้ ตัวอย่างเช่น ให้รันสคริปต์ที่ 5 และ 35 นาทีหลังจากห้า (16:05 และ 16:35 น.) ทุกวัน:
5.35 16 * * * /usr/local/bin/serve
คุณอาจไม่ต้องการระบุเวลาแยกกัน แต่เพียงระบุช่วงเวลาที่คุณต้องการให้สคริปต์ทำงาน เช่น หนึ่งครั้งทุกๆ 10 นาที เมื่อต้องการทำเช่นนี้ ให้ใช้ตัวคั่นด้วยเครื่องหมายทับ - "/":
*/10 * * * * /usr/local/bin/serve
นอกจากนี้ ได้มีการคิดค้นตัวแปรสำหรับชุดที่ใช้กันทั่วไปบางชุด ดังนี้
- @รีบูต- เมื่อโหลดเพียงครั้งเดียว
- @รายปี, @รายปี- ปีละครั้ง
- @รายเดือน- เดือนละครั้ง
- @รายสัปดาห์- สัปดาห์ละครั้ง
- @ทุกวัน, @เที่ยงคืน- ทุกวัน;
- @รายชั่วโมง- ทุกชั่วโมง
ตัวอย่างเช่น คำสั่งให้รันสคริปต์ชั่วโมงละครั้งมีลักษณะดังนี้:
@รายชั่วโมง /usr/local/bin/serve
หากคุณกำลังจะเพิ่มสคริปต์ลงในโฟลเดอร์ใดโฟลเดอร์หนึ่ง อย่างที่ฉันได้กล่าวไปแล้ว คุณต้องให้ชื่อสคริปต์ไม่มีจุดและมีสิทธิ์ดำเนินการ:
sudo vi /etc/corn.daily/basckup
สคริปต์ควรมีลักษณะเช่นนี้ ในทำนองเดียวกัน- ตอนนี้คุณรู้วิธีตั้งค่า cron แล้ว สิ่งที่เหลืออยู่คือการตรวจสอบว่าทุกอย่างทำงานอย่างไร
งานแก้จุดบกพร่อง
หลังจากที่คุณตั้งค่ากฎแล้ว คุณต้องการตรวจสอบด้วยว่ากฎเหล่านั้นใช้ได้ผลหรือไม่ ในการดำเนินการนี้ เราจะรอเวลาที่สคริปต์ควรจะถูกเรียกใช้งานแล้วและดูที่บันทึกของ cron บางครั้งมันอยู่ใน /var/log/cron และบางครั้งก็เขียนไปที่ syslog ตัวอย่างเช่น ฉันมีบรรทัดนี้ใน crontab:
ควรดำเนินการเวลา 19.40 น. ทุกวัน ตอนนี้ดูที่บันทึก:
grep CRON /var/log/syslog.php
และเราเห็นว่าในบันทึกของเราเป็นจริงและดำเนินการได้สำเร็จอย่างสมบูรณ์ หากมีข้อผิดพลาดข้อความก็จะปรากฏขึ้นทันที
หากคุณต้องการตรวจสอบสคริปต์ที่อยู่ในโฟลเดอร์พิเศษโฟลเดอร์ใดโฟลเดอร์หนึ่ง จะง่ายกว่านั้นอีก เพียงเรียกใช้ run-path แล้วส่งเป็นพารามิเตอร์ โฟลเดอร์ที่ต้องการหรือแม้แต่สคริปต์เอง:
sudo run-paths /etc/cron.daily/
ข้อสรุป
ในบทความนี้ เราได้ศึกษาถึงวิธีการกำหนดค่า cron การวางแผนที่สะดวกงานอัตโนมัติ ฉันหวังว่าข้อมูลนี้จะเป็นประโยชน์กับคุณ
ในระบบ ลินุกซ์การเริ่มต้นงานอัตโนมัติดำเนินการโดย crond daemon และการกำหนดเวลา เริ่มต้นอัตโนมัติไม่เพียงแต่ผู้ดูแลระบบเท่านั้น แต่ผู้ใช้สามารถทำงานต่างๆ ได้อีกด้วย
ครอนด์ทำงานอย่างไร?
หลักการของ crond daemon นั้นเรียบง่าย หลังจากสตาร์ท (โดยปกติจะเป็นตอนที่ระบบบูท) daemon จะตื่นทุกนาทีและตรวจสอบดูว่ามีโปรแกรมใดถูกกำหนดให้รันในนาทีนั้นหรือไม่ หากพบโปรแกรมดังกล่าว daemon จะเริ่มทำงานและส่งผ่าน อีเมลข้อความถึงผู้ใช้ที่กำหนดเวลาการเปิดตัวไว้
การจัดกำหนดการงาน
การสร้างตารางเวลาไม่ใช่เรื่องยาก กำหนดการอยู่ในไฟล์ crontab แยกต่างหาก แต่ละบรรทัดของไฟล์ประกอบด้วยงานที่ต้องรันในเวลาที่กำหนด
รูปแบบไฟล์ Crontab
ส่วนวันที่และเวลาประกอบด้วยช่องตัวเลขห้าช่อง คั่นด้วยช่องว่าง ซึ่งกำหนดเวลาที่งานเริ่มต้น:
เพื่อความสะดวกในการกรอกข้อมูลในฟิลด์เหล่านี้ จึงมีการนำกฎต่อไปนี้:
- คุณสามารถระบุค่าเป็นช่วงตัวเลขได้ ตัวอย่างเช่น ช่วงเวลา 1-3 ในช่องชั่วโมงหมายถึง 1.00, 2.00 และ 3.00 น. เที่ยงคืน 2-4 ในช่องวันในสัปดาห์ - วันอังคาร วันพุธ หรือวันพฤหัสบดี
- ช่วงเวลาสามารถตั้งค่าเพิ่มได้มากกว่าหนึ่ง ตัวอย่างเช่น หากต้องการระบุทุกชั่วโมงที่สองเริ่มตั้งแต่เที่ยงคืน คุณจะต้องตั้งค่าช่วงเวลาเป็น 0-23 โดยเพิ่มทีละ 2 โดยคั่นด้วยเครื่องหมายทับ: 0-23/2
- เครื่องหมายดอกจัน (*) ระบุช่วงค่าฟิลด์ทั้งหมดตั้งแต่ต่ำสุดไปจนถึงสูงสุด ตัวอย่างเช่น ในช่องวันของเดือน เครื่องหมายดอกจันหมายถึงช่วง 0-31 ในช่องวันของสัปดาห์ - 0-7
- สามารถระบุวันในสัปดาห์หรือเดือนด้วยตัวอักษรสามตัวแรกของชื่อ (ภาษาอังกฤษ)
ตัวอย่างวันที่และเวลา
ตัวอย่างการกรอกข้อมูลในช่องวันที่และเวลา:
0 1 * * * รันงานทุกวัน เวลา 1.00 น. เที่ยงคืน 30 14 * * 0 รันงานทุกวันอาทิตย์ เวลา 14.30 น. 0 23-7/2.8 * * * รันงานทุก 2 ชั่วโมง ตั้งแต่ 23.00 ถึง 7.00 น. และ 8.00 0 12 * 1 จันทร์ รันงานตอนเที่ยงของทุกวันจันทร์ของเดือนมกราคมของทุกปี 0 12 2 กุมภาพันธ์ * รันงานตอนเที่ยงของวันที่สองของเดือนกุมภาพันธ์ของทุกปี
ช่องคำสั่ง
ฟิลด์คำสั่งถูกแยกออกจากฟิลด์วันที่-เวลาด้วยช่องว่างอย่างน้อยหนึ่งช่อง และขยายไปจนถึงท้ายบรรทัด คำสั่งถูกประมวลผลโดยเชลล์ /bin/sh
ตัวอย่างเช่น, รายการถัดไปในไฟล์ crontab ระบุว่าโปรแกรม /usr/sbin/backup จะเปิดตัวทุกวันเวลา 1.00 น.:
0 1 * * * /usr/sbin/backup
คำสั่งบางคำสั่ง (เช่น เมล) จำเป็นต้องมีอินพุตจากอุปกรณ์ อินพุตมาตรฐาน- ซึ่งระบุโดยใช้เครื่องหมายเปอร์เซ็นต์ (%) อักขระตัวแรกระบุถึงจุดเริ่มต้นของอินพุตมาตรฐาน อักขระแต่ละตัวที่ตามมาจะระบุถึงการเปลี่ยนแปลงบรรทัด
การแก้ไขไฟล์ crontab
ไฟล์ crontab ได้รับการแก้ไขด้วยคำสั่ง crontab -e เป็นไปได้สองแนวทาง:
- สร้างไฟล์ใหม่พร้อมรายการทั้งหมดที่ควรรวมอยู่ในไฟล์ crontab จากนั้นเขียนลงดิสก์ภายใต้ชื่อนี้โดยใช้คำสั่ง crontab
- แก้ไขไฟล์โดยตรงโดยใช้คำสั่ง crontab -e
เขียนจากไฟล์
หากต้องการเขียนเนื้อหาของไฟล์ crontab จากไฟล์อื่น คุณจะต้องสร้างไฟล์อื่นนั้น (ตามปกติ โปรแกรมแก้ไขข้อความ) พร้อมด้วยรายการทั้งหมดที่ควรประกอบเป็นไฟล์ crontab นี่อาจเป็นรายการต่อไปนี้:
0 1 * * * /usr/sbin/backup
ควรกำหนดไฟล์ที่สร้างขึ้น ชื่อที่เหมาะสมเช่นงานсron หลังจาก ไฟล์ที่ระบุสร้างขึ้นเนื้อหาจะต้องเขียนลงในไฟล์ crontab ด้วยคำสั่ง:
~$ crontab cronjobs
เนื้อหาของไฟล์ cronjobs จะแทนที่เนื้อหาของไฟล์ crontab โดยสมบูรณ์ ผู้ใช้ที่กำหนด- เมื่อใช้วิธีนี้ ผู้ใช้ทุกคนจะสามารถแก้ไขไฟล์ crontab ได้ ผู้ใช้ระดับสูงมีสิทธิ์พิเศษในการแก้ไขไฟล์ crontab ของผู้ใช้รายอื่น การแก้ไขไฟล์ของผู้อื่นจะถูกระบุโดยแฟล็ก -u ตัวอย่างเช่น โดยคำสั่ง:
~# crontab -u oleg cronjobs
ไฟล์ cronjobs ถูกเขียนเป็นไฟล์ crontab ของผู้ใช้ oleg
แก้ไขไฟล์ crontab โดยตรง
คำสั่ง crontab หลีกเลี่ยงการดำเนินการหลายขั้นตอนในการสร้าง แยกไฟล์- หากคุณออกคำสั่ง crontab ด้วยตัวเลือก -e คุณสามารถแก้ไขไฟล์ crontab ได้โดยตรง
ตามค่าเริ่มต้น การใช้คำสั่ง crontab พร้อมด้วยตัวเลือก -e ไฟล์ crontab จะถูกโหลดลงในเอดิเตอร์ บรรณาธิการ วิ- เครื่องดนตรีที่ทรงพลังแต่ซับซ้อนซึ่งเป็นที่นิยมในหมู่ ผู้ใช้ที่มีประสบการณ์ ยูนิกซ์- บุคคลที่ชอบบรรณาธิการอื่น เช่น เซดิท,สามารถตั้งค่าที่สอดคล้องกันได้ ตัวแปรสภาพแวดล้อมบรรณาธิการ:
~$ ส่งออก EDITOR=xedit
หลังจากนั้นให้ป้อนคำสั่ง
ทำให้ไฟล์ crontab ถูกเปิดในตัวแก้ไขที่ระบุ
เช่นเดียวกับ ผู้ใช้ปกติสามารถแก้ไขได้ ไฟล์ของตัวเอง crontab ผู้ใช้ขั้นสูงสามารถแก้ไขไฟล์ crontab ของผู้ใช้รายอื่นได้ เมื่อต้องการทำเช่นนี้ ให้ใช้คำสั่ง:
~# crontab -u ชื่อผู้ใช้ -e
การดูไฟล์ crontab
หากต้องการดูเนื้อหาของไฟล์ crontab ให้ป้อนคำสั่ง:
ผู้ใช้ระดับสูงสามารถดูไฟล์ crontab ของผู้ใช้รายอื่นได้:
~# crontab -u ชื่อผู้ใช้ -l
การลบไฟล์ crontab
หากต้องการลบเนื้อหาของไฟล์ crontab ผู้ใช้ป้อนคำสั่ง:
ผู้ใช้ขั้นสูงสามารถลบไฟล์ crontab ของผู้ใช้รายอื่นได้