<ก่อนหน้านี้ | Contents | ถัดไป>
เป็นความคิดที่ดีที่จะเลือกเวลาดำเนินการที่แปลก เพราะงานระบบมักจะทำงานที่ "รอบ" ชั่วโมง ดังที่คุณเห็นในหัวข้อ 4.4.4 ในส่วนถัดไป ตัวอย่างเช่น งานมักจะทำงานที่ 1 นาฬิกาในตอนเช้า (เช่น การจัดทำดัชนีระบบเพื่ออัปเดตฐานข้อมูลการค้นหามาตรฐาน) ดังนั้นการป้อนเวลา 0100 อาจทำให้ระบบของคุณช้าลงแทนที่จะเริ่มทำงาน เพื่อป้องกันไม่ให้งานทำงานทั้งหมดพร้อมกัน คุณอาจใช้ ชุด คำสั่ง ซึ่งจัดคิวประมวลผลและป้อนงานในคิวไปยังระบบอย่างสมดุล ป้องกันการล้นเกินของการใช้ทรัพยากรระบบ ดูหน้าข้อมูลสำหรับข้อมูลเพิ่มเติม
4.4.4. Cron และ crontab
ระบบ cron ถูกจัดการโดย cron ภูต ได้รับข้อมูลเกี่ยวกับโปรแกรมและเวลาที่ควรจะเรียกใช้จากรายการ crontab ของระบบและผู้ใช้ เฉพาะผู้ใช้รูทเท่านั้นที่มีสิทธิ์เข้าถึง crontabs ของระบบ ในขณะที่ผู้ใช้แต่ละคนควรมีสิทธิ์เข้าถึง crontabs ของตนเองเท่านั้น ในบางระบบ (บางส่วน) ผู้ใช้อาจไม่สามารถเข้าถึงสิ่งอำนวยความสะดวก cron
เมื่อระบบเริ่มทำงาน cron daemon จะค้นหา / var / สปูล / cron / สำหรับรายการ crontab ซึ่งตั้งชื่อตามบัญชีใน / etc / passwd, มันค้นหา /etc/cron.d/ และมันค้นหา / etc / crontabจากนั้นใช้ข้อมูลนี้ทุกนาทีเพื่อตรวจสอบว่ามีอะไรที่ต้องทำหรือไม่ มันรันคำสั่งในฐานะผู้ใช้ที่เป็นเจ้าของไฟล์ crontab และส่งเอาต์พุตของคำสั่งใด ๆ ไปยังเจ้าของ
ในระบบที่ใช้ Vixie cron งานที่เกิดขึ้นเป็นรายชั่วโมง รายวัน รายสัปดาห์ และรายเดือน จะถูกเก็บไว้ในไดเร็กทอรีแยกต่างหากใน / ฯลฯ เพื่อให้ภาพรวม ตรงข้ามกับฟังก์ชัน cron มาตรฐานของ UNIX โดยที่งานทั้งหมดจะถูกป้อนลงในไฟล์ขนาดใหญ่ไฟล์เดียว
ตัวอย่างของไฟล์ Vixie crontab:
[root@blob / etc]# crontab เพิ่มเติม SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=รูท
หน้าแรก=/
#อะไหล่วิ่ง
# คำสั่งให้ดำเนินการทุก ๆ ชั่วโมง
01 * * * * รูทรันพาร์ท /etc/cron.hourly
#คำสั่งให้ดำเนินการทุกวัน
02 4 * * * รูทรันพาร์ท /etc/cron.daily
#คำสั่งให้ดำเนินการทุกสัปดาห์
22 4 * * 0 root run-parts /etc/cron.weekly คำสั่งที่จะดำเนินการทุกเดือน
42 4 1 * * ส่วนรันรูท /etc/cron.monthly
[root@blob / etc]# crontab เพิ่มเติม SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=รูท
หน้าแรก=/
#อะไหล่วิ่ง
# คำสั่งให้ดำเนินการทุก ๆ ชั่วโมง
01 * * * * รูทรันพาร์ท /etc/cron.hourly
#คำสั่งให้ดำเนินการทุกวัน
02 4 * * * รูทรันพาร์ท /etc/cron.daily
#คำสั่งให้ดำเนินการทุกสัปดาห์
22 4 * * 0 root run-parts /etc/cron.weekly คำสั่งที่จะดำเนินการทุกเดือน
42 4 1 * * ส่วนรันรูท /etc/cron.monthly
ทางเลือก
คุณสามารถใช้ crontab -l คำสั่งแสดง crontabs
มีการตั้งค่าตัวแปรบางตัว และหลังจากนั้นจะมีการจัดกำหนดการจริง หนึ่งบรรทัดต่องาน โดยเริ่มจากช่องเวลาและวันที่ 5 ช่อง ฟิลด์แรกประกอบด้วยนาที (จาก 0 ถึง 59) ฟิลด์ที่สองกำหนดชั่วโมงของการดำเนินการ (0-23) ที่สามคือวันของเดือน (1-31) จากนั้นจำนวนเดือน (1-12) วันสุดท้ายของสัปดาห์ (0-7 ทั้ง 0 และ 7 คือวันอาทิตย์) เครื่องหมายดอกจันในฟิลด์เหล่านี้แสดงถึงช่วงที่ยอมรับได้ทั้งหมดสำหรับฟิลด์นั้น รายการได้รับอนุญาต; เพื่อดำเนินงานตั้งแต่วันจันทร์ถึงวันศุกร์ ให้ป้อน 1-5 ในช่องสุดท้าย เพื่อดำเนินงานในวันจันทร์ วันพุธ และวันศุกร์ ให้ป้อน 1,3,5
จากนั้นผู้ใช้ที่ควรเรียกใช้กระบวนการซึ่งแสดงอยู่ในคอลัมน์สุดท้ายมา ตัวอย่างข้างต้นมาจากการกำหนดค่า Vixie cron ที่รูทรันโปรแกรม ชิ้นส่วนวิ่ง เป็นระยะ ๆ โดยมีไดเร็กทอรีที่เหมาะสมเป็นตัวเลือก ในไดเร็กทอรีเหล่านี้ งานจริงที่จะดำเนินการในเวลาที่กำหนดจะถูกเก็บไว้เป็นเชลล์สคริปต์ เช่นเดียวกับสคริปต์เล็กๆ นี้ที่รันทุกวันเพื่ออัพเดตฐานข้อมูลที่ใช้โดย ค้นหา คำสั่ง:
billy@ahost cron.daily]$ แมว slocate.cron
# / bin / sh
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e \"/tmp,/var/tmp, /usr/tmp,/afs,/net"
billy@ahost cron.daily]$ แมว slocate.cron
# / bin / sh
renice +19 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "nfs,smbfs,ncpfs,proc,devpts" -e \"/tmp,/var/tmp, /usr/tmp,/afs,/net"
ผู้ใช้ควรแก้ไข crontabs ของตนอย่างปลอดภัยโดยใช้ crontab -e สั่งการ. วิธีนี้จะป้องกันไม่ให้ผู้ใช้เปิดไฟล์ crontab ของตนมากกว่าหนึ่งสำเนาโดยไม่ได้ตั้งใจ ตัวแก้ไขเริ่มต้นคือ vi (ดูบทที่ 6 แต่คุณสามารถใช้โปรแกรมแก้ไขข้อความใดก็ได้ เช่น กวิม or Gedit หากคุณรู้สึกสบายใจกับตัวแก้ไข GUI
เมื่อคุณออก ระบบจะแจ้งให้คุณทราบว่ามีการติดตั้ง crontab ใหม่แล้ว
รายการ crontab นี้เตือน บิลลี่ ไปสปอร์ตคลับของเขาทุกคืนวันพฤหัสบดี:
บิลลี่:~> crontab -l
# ห้ามแก้ไขไฟล์นี้ - แก้ไขต้นแบบและติดตั้งใหม่
# (/tmp/crontab.20264 ติดตั้งเมื่ออาทิตย์ 20 ก.ค. 22:35:14 2003)
บิลลี่:~> crontab -l
# ห้ามแก้ไขไฟล์นี้ - แก้ไขต้นแบบและติดตั้งใหม่
# (/tmp/crontab.20264 ติดตั้งเมื่ออาทิตย์ 20 ก.ค. 22:35:14 2003)
# (เวอร์ชัน Cron -- $Id: chap4.xml,v 1.28 2007/09/19 12:22:26 จนถึง Exp $)
38 16 * * 3 เมล - s "กีฬาเย็น" บิลลี่
# (เวอร์ชัน Cron -- $Id: chap4.xml,v 1.28 2007/09/19 12:22:26 จนถึง Exp $)
38 16 * * 3 เมล - s "กีฬาเย็น" บิลลี่
หลังจากเพิ่มงานตามกำหนดเวลาใหม่แล้ว ระบบจะแจ้งให้คุณทราบว่ามีการติดตั้ง crontab ใหม่แล้ว คุณไม่จำเป็นต้องรีสตาร์ท cron daemon เพื่อให้การเปลี่ยนแปลงมีผล ในตัวอย่าง บิลลี่ เพิ่มบรรทัดใหม่ที่ชี้ไปที่สคริปต์สำรอง:
บิลลี่:~> crontab -e
45 15 * * 3 เมล - s "กีฬาเย็น" บิลลี่
4 4 * * 4,7 /home/billy/bin/backup.sh
<--เขียนแล้วออก-->
crontab: ติดตั้ง crontab billy ใหม่:~>
บิลลี่:~> crontab -e
45 15 * * 3 เมล - s "กีฬาเย็น" บิลลี่
4 4 * * 4,7 /home/billy/bin/backup.sh
<--เขียนแล้วออก-->
crontab: ติดตั้ง crontab billy ใหม่:~>
การขอ สำรอง.sh สคริปต์จะดำเนินการทุกวันพฤหัสบดีและวันอาทิตย์ ดูหัวข้อ 7.2.5 สำหรับข้อมูลเบื้องต้นเกี่ยวกับเชลล์สคริปต์ โปรดทราบว่าเอาต์พุตของคำสั่ง หากมี จะถูกส่งไปยังเจ้าของไฟล์ crontab หากไม่มีการกำหนดค่าบริการอีเมล คุณอาจพบผลลัพธ์ของคำสั่งในกล่องจดหมายในเครื่องของคุณ
/var/spool/mail/ , ไฟล์ข้อความธรรมดา