Cron & crontab อธิบาย

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

cron คืออะไร?

cron ชื่อนี้มาจากโครโนภาษากรีกซึ่งแปลว่า "เวลา" ในระบบปฏิบัติการ Unix cron เป็นตัวจัดการกระบวนการพื้นหลังปกติ (daemon) ที่รันกระบวนการหรือสคริปต์ในช่วงเวลาปกติ (เช่นทุกนาทีวันสัปดาห์หรือเดือน) กระบวนการที่ต้องดำเนินการและเวลาที่ต้องดำเนินการระบุไว้ในไฟล์ crontab

funciona โคโม

cron daemon เริ่มจาก /etc/rc.d/ o /etc/init.d ขึ้นอยู่กับการกระจาย Cron ทำงานในพื้นหลังตรวจสอบตารางงาน crontab ทุกนาที / etc / crontab en o / var / สปูล / cron ในการค้นหางานที่จะสำเร็จ ในฐานะผู้ใช้เราสามารถเพิ่มคำสั่งหรือสคริปต์ที่มีงานให้กับ cron เพื่อทำให้กระบวนการบางอย่างเป็นไปโดยอัตโนมัติ สิ่งนี้มีประโยชน์สำหรับการอัปเดตระบบโดยอัตโนมัติหรือระบบสำรองข้อมูลที่ดี

บทความที่เกี่ยวข้อง:
บทช่วยสอน: ติดตั้งแพ็คเกจ. tar.gz และ. tar.bz2

Crontab คืออะไร?

Crontab เป็นไฟล์ข้อความธรรมดาที่จัดเก็บรายการคำสั่งที่จะดำเนินการตามเวลาที่ผู้ใช้กำหนด Crontab จะตรวจสอบวันที่และเวลาที่ควรเรียกใช้สคริปต์หรือคำสั่งสิทธิ์ในการดำเนินการและจะทำในพื้นหลัง ผู้ใช้แต่ละคนสามารถมีไฟล์ crontab ของตัวเองในความเป็นจริงไฟล์ / etc / crontab ถือว่าเป็นไฟล์ crontab ของผู้ใช้ root เมื่อผู้ใช้ทั่วไป (และแม้แต่ root) ต้องการสร้างไฟล์ crontab ของตัวเองเราจะใช้คำสั่ง crontab

Crontab เป็นวิธีที่ง่ายที่สุดในการจัดการงาน cron บนระบบผู้ใช้หลายคนไม่ว่าจะเป็นผู้ใช้ระบบธรรมดาหรือผู้ใช้รูท

ใช้ crontab

เรากำลังเริ่มต้นด้วยตัวอย่างง่ายๆ

เราจะทำการอัปเดตระบบโดยอัตโนมัติเพื่อกำจัดความน่ารำคาญของ "ฉันต้องอัปเดตอยู่เสมอและฉันไม่ชอบสิ่งนั้น!"

วิธีการ
บทความที่เกี่ยวข้อง:
คำสั่งให้รู้จักระบบ (ระบุฮาร์ดแวร์และการกำหนดค่าซอฟต์แวร์บางอย่าง)

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

#! / bin / bash #script ตัวอย่างการอัปเดต # เลือกการแจกจ่ายของคุณ # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu

ลบ # ออกจากบรรทัด distro ของคุณ ในกรณีที่เป็น Ubuntu / Debian จะเริ่มต้นด้วย apt-get

เราบันทึกสคริปต์เป็น update.sh (เช่นสคริปต์ไดเรกทอรีบ้านของคุณ) เราเปลี่ยนสิทธิ์การดำเนินการของสคริปต์ดังกล่าวด้วย:

chmod a + x ~ / scripts / update.sh

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

เพิ่มงานใน crontab

เราดำเนินการรุ่นของ crontab ด้วย crontab -e ใน distros บางตัว (เช่น ubuntu) มันทำให้เรามีตัวเลือกในการเลือกโปรแกรมแก้ไขข้อความที่เราต้องการส่วนที่เหลือเราเหลือไว้ด้วย vi ไฟล์ crontab จะเป็นแบบนี้

# mh dom mon dow คำสั่งผู้ใช้

ที่อยู่:

  • m สอดคล้องกับนาทีที่สคริปต์จะถูกเรียกใช้ค่ามีตั้งแต่ 0 ถึง 59
  • h เวลาที่แน่นอนรูปแบบ 24 ชั่วโมงได้รับการจัดการค่าอยู่ในช่วง 0 ถึง 23 โดย 0 เป็นเวลา 12 น.
  • ดวงอาทิตย์ หมายถึงวันของเดือนตัวอย่างเช่นคุณสามารถระบุ 15 หากคุณต้องการเรียกใช้ทุก 15 วัน
  • Dow หมายถึงวันในสัปดาห์อาจเป็นตัวเลข (0 ถึง 7 โดยที่ 0 และ 7 คือวันอาทิตย์) หรือตัวอักษร 3 ตัวแรกของวันในภาษาอังกฤษ: mon, tue, wed, thu, fri, sat, sun
  • ผู้ใช้งาน กำหนดผู้ใช้ที่จะดำเนินการคำสั่งสามารถรูทหรือผู้ใช้อื่นได้ตราบเท่าที่พวกเขามีสิทธิ์ในการรันสคริปต์
  • คำสั่ง หมายถึงคำสั่งหรือเส้นทางสัมบูรณ์ของสคริปต์ที่จะดำเนินการตัวอย่าง: /home/usuario/scripts/update.shหากเรียกสคริปต์ก็จะต้องเรียกใช้งานได้

เพื่อความชัดเจนบางตัวอย่างของงาน cron อธิบาย:

15 10 * * * ผู้ใช้ /home/user/scripts/update.sh

มันจะเรียกใช้สคริปต์ update.sh เวลา 10:15 น. ของทุกวัน

15 22 * * * ผู้ใช้ /home/user/scripts/update.sh

มันจะเรียกใช้สคริปต์ update.sh เวลา 10:15 น. ของทุกวัน

00 10 * * 0 root apt-get -y อัปเดตผู้ใช้รูท

จะทำการอัปเดตทุกวันอาทิตย์เวลา 10 น

45 10 * * sun root apt-get -y อัปเดต

ผู้ใช้รูทจะทำการอัปเดตทุกวันอาทิตย์ (อาทิตย์) เวลา 10:45 น

30 7 20 11 * ผู้ใช้ /home/usuario/scripts/update.sh

ในวันที่ 20 พฤศจิกายนเวลา 7:30 น. ผู้ใช้จะเรียกใช้สคริปต์

30 7 11 11 ผู้ใช้อาทิตย์ /home/usuario/scripts/pastel_con_velitas.sh

ในวันที่ 11 พฤศจิกายนเวลา 7 น. และนั่นคือวันอาทิตย์ผู้ใช้จะฉลองผู้ดูแลระบบของเขา (นั่นคือฉัน)

01 * * * * ผู้ใช้ /home/usuario/scripts/molestorecordatorio.sh

การแจ้งเตือนที่น่ารำคาญทุก ๆ นาทีทุก ๆ ชั่วโมงทุกวัน (ไม่แนะนำ)

พวกเขายังสามารถจัดการได้ ช่วงพิเศษ:

30 17 * * 1,2,3,4,5

เวลา 5 น. ในช่วงบ่ายของทุกวันตั้งแต่วันจันทร์ถึงวันศุกร์

00 12 1,15,28 *

เวลา 12 น. ของวันแรกที่สิบห้าและ 28 ของทุกเดือน (เหมาะสำหรับการจ่ายเงินเดือน)

หากเกิดความสับสนให้จัดการ crontab สตริงพิเศษเพื่อกำหนดช่วงเหล่านี้.

@reboot เรียกใช้ครั้งเดียวเมื่อเริ่มต้น
@ ปีละ 0 ครั้งเท่านั้น: 0 1 1 XNUMX *
@ ทุกวันเช่นเดียวกับ @yearly
@ เดือนละ 0 ครั้งวันแรก: 0 1 XNUMX * *
@ ทุกสัปดาห์ทุกนาทีนาทีแรกของชั่วโมงแรกของสัปดาห์ 0 0 * * 0″.
@ ทุกวันเวลา 12 น. 00 0 * * *
@midnight เช่นเดียวกับ @daily
@ ทุกนาทีแรกของทุกชั่วโมง: 0 * * * *

การใช้งานนั้นง่ายมาก

@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y อัพเกรด

สุดท้าย แต่ไม่ท้ายสุด:

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

ไฟล์ crontab

แทนที่ไฟล์ crontab ที่มีอยู่ด้วยไฟล์ที่ผู้ใช้กำหนดเอง

crontab -e

แก้ไขไฟล์ crontab ของผู้ใช้แต่ละบรรทัดใหม่จะเป็นงาน crontab ใหม่

crontab -l

แสดงรายการงาน crontab ของผู้ใช้ทั้งหมด

crontab -d

ลบ crontab ของผู้ใช้

crontab -c ผบ

กำหนดไดเร็กทอรี crontab ของผู้ใช้ (ต้องมีสิทธิ์ในการเขียนและดำเนินการของผู้ใช้)

ผู้ใช้ crontab -u

คำนำหน้าเพื่อจัดการกับ crontab ของผู้ใช้รายอื่นตัวอย่าง:

$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u ผู้ใช้

เครื่องมือนี้เช่นเดียวกับเครื่องมืออื่น ๆ สามารถมองเห็นได้ในเชิงลึกและรายละเอียดเพิ่มเติมใน:

ขอบคุณ Lucain!