Android

การกำหนดเวลางาน cron ด้วย crontab

Linux Backup with TAR and Cron Jobs

Linux Backup with TAR and Cron Jobs

สารบัญ:

Anonim

Cron เป็น daemon การกำหนดเวลาที่ดำเนินงานตามช่วงเวลาที่กำหนด งานเหล่านี้เรียกว่างาน cron และส่วนใหญ่จะใช้ในการบำรุงรักษาหรือการดูแลระบบโดยอัตโนมัติ

ตัวอย่างเช่นคุณสามารถตั้งค่างาน cron เพื่อทำงานซ้ำอัตโนมัติเช่นการสำรองฐานข้อมูลหรือข้อมูลการปรับปรุงระบบด้วยแพตช์รักษาความปลอดภัยล่าสุดตรวจสอบการใช้พื้นที่ดิสก์การส่งอีเมลและอื่น ๆ แอปพลิเคชั่นบางตัวเช่น Drupal หรือ Magento ต้องใช้งาน cron เพื่อทำงานบางอย่าง

งาน cron สามารถกำหนดให้ทำงานโดยนาที, ชั่วโมง, วันที่ของเดือน, เดือน, วันในสัปดาห์หรือการรวมกันของเหล่านี้

ไฟล์ Crontab คืออะไร

Crontab (ตาราง cron) เป็นไฟล์ข้อความที่ระบุตารางเวลาของงาน cron ไฟล์ crontab มีสองประเภท ไฟล์ crontab ทั่วทั้งระบบและไฟล์ crontab ของผู้ใช้แต่ละคน

ไฟล์ crontab ของผู้ใช้จะถูกจัดเก็บตามชื่อผู้ใช้และตำแหน่งของผู้ใช้นั้นแตกต่างกันไปตามระบบปฏิบัติการ ในระบบที่ใช้ Red Hat เช่น CentOS ไฟล์ crontab จะถูกเก็บไว้ในไดเร็กทอรี /var/spool/cron ขณะที่ไฟล์ Debian และ Ubuntu จะถูกเก็บไว้ในไดเร็กทอรี /var/spool/cron/crontabs

แม้ว่าคุณสามารถแก้ไขไฟล์ crontab ของผู้ใช้ด้วยตนเองขอแนะนำให้ใช้คำสั่ง crontab

/etc/crontab และไฟล์ภายในไดเร็กทอรี /etc/cron.d เป็นไฟล์ crontab ทั่วทั้งระบบที่สามารถแก้ไขได้โดยผู้ดูแลระบบเท่านั้น

ในลีนุกซ์ส่วนใหญ่คุณสามารถใส่สคริปต์ไว้ในไดเร็กทอรี /etc/cron.{hourly, daily, weekly, monthly} และสคริปต์จะถูกเรียกใช้งานทุก hour/day/week/month

ไวยากรณ์และผู้ประกอบการ Crontab

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

* * * * * command(s) - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)

ห้าฟิลด์แรกอาจมีหนึ่งค่าขึ้นไปคั่นด้วยเครื่องหมายจุลภาคหรือช่วงของค่าที่คั่นด้วยเครื่องหมายยัติภังค์

  • * - เครื่องหมายดอกจันหมายถึงค่าใด ๆ หรือเสมอ หากคุณมีสัญลักษณ์ดอกจันในฟิลด์ชั่วโมงหมายความว่างานจะถูกดำเนินการทุกชั่วโมง , - ตัวดำเนินการเครื่องหมายจุลภาคช่วยให้คุณสามารถระบุรายการของค่าสำหรับการทำซ้ำ ตัวอย่างเช่นถ้าคุณมี 1, 3, 5 ในฟิลด์ชั่วโมงงานจะทำงานที่ 1 am, 3 am และ 5 am - - โอเปอเรเตอร์ยัติภังค์ช่วยให้คุณสามารถระบุช่วงของค่า หากคุณมี 1-5 ในฟิลด์วันของสัปดาห์งานจะทำงานทุกวัน (ตั้งแต่วันจันทร์ถึงวันศุกร์) / - ตัวดำเนินการทับช่วยให้คุณสามารถระบุค่าที่จะทำซ้ำในช่วงเวลาที่แน่นอนระหว่างพวกเขา ตัวอย่างเช่นหากคุณมี */4 ในฟิลด์ชั่วโมงหมายความว่าการดำเนินการจะดำเนินการทุกสี่ชั่วโมง มันเหมือนกับการระบุ 0, 4, 8, 12, 16, 20 แทนเครื่องหมายดอกจันก่อนตัวดำเนินการทับคุณยังสามารถใช้ช่วงของค่า 1-30/10 หมายถึงเหมือนกับ 1, 11, 21

ไฟล์ Crontab ทั่วทั้งระบบ

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

* * * * * command(s) * * * * * command(s)

มาโครที่กำหนดไว้ล่วงหน้า

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

  • @yearly (หรือ @annually ) - ทำงานที่ระบุปีละครั้งในเวลาเที่ยงคืน (12.00 น.) ของวันที่ 1 มกราคม เทียบเท่ากับ 0 0 1 1 * @monthly - รันภารกิจที่ระบุเดือนละครั้งเวลาเที่ยงคืนของวันแรกของเดือน เทียบเท่ากับ 0 0 1 * * @weekly - รันภารกิจที่ระบุสัปดาห์ละครั้งเวลาเที่ยงคืนของวันอาทิตย์ เทียบเท่ากับ 0 0 * * 0 @daily - รันภารกิจที่ระบุวันละครั้งตอนเที่ยงคืน เทียบเท่ากับ 0 0 * * * @hourly - รันภารกิจที่ระบุหนึ่งครั้งต่อชั่วโมงที่จุดเริ่มต้นของชั่วโมง เทียบเท่ากับ 0 * * * * @reboot - รันภารกิจที่ระบุเมื่อเริ่มต้นระบบ (บูตเวลา)

คำสั่ง Linux Crontab

คำสั่ง crontab อนุญาตให้คุณติดตั้งหรือเปิดไฟล์ crontab เพื่อแก้ไข

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

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

คำสั่ง crontab เปิดไฟล์ crontab โดยใช้เอดิเตอร์ที่ระบุโดยตัวแปรสภาวะแวดล้อม VISUAL หรือ EDITOR

ตัวแปร Crontab

cron daemon ตั้งค่าตัวแปรสภาพแวดล้อมหลายตัวโดยอัตโนมัติ

  • เส้นทางเริ่มต้นถูกตั้งค่าเป็น PATH=/usr/bin:/bin หากคำสั่งที่คุณกำลังเรียกใช้อยู่ในพา ธ ที่ระบุ cron คุณสามารถใช้พา ธ สัมบูรณ์ไปยังคำสั่งหรือเปลี่ยนตัวแปร cron $PATH คุณไม่สามารถผนวกท้าย :$PATH เหมือนที่คุณทำกับสคริปต์ปกติเชลล์เริ่มต้นถูกตั้งค่าเป็น /bin/sh คุณสามารถตั้งค่าเปลือกที่แตกต่างกันโดยการเปลี่ยนตัวแปร SHELL.Cron เรียกคำสั่งจากไดเรกทอรีบ้านของผู้ใช้ ตัวแปร HOME สามารถแทนที่ได้โดยการตั้งค่าใน crontab การแจ้งเตือนทางอีเมลจะถูกส่งไปยังเจ้าของ crontab ในการเขียนทับพฤติกรรมเริ่มต้นคุณสามารถใช้ตัวแปรสภาพแวดล้อม MAILTO พร้อมรายการ (คั่นด้วยเครื่องหมายจุลภาค) ของที่อยู่อีเมลทั้งหมดที่คุณต้องการรับการแจ้งเตือนทางอีเมล หาก MAILTO ถูกกำหนด แต่ว่างเปล่า ( MAILTO="" ) จะไม่มีการส่งจดหมายใด ๆ

ข้อ จำกัด Crontab

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

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

หากไฟล์ /etc/cron.allow มีอยู่เฉพาะผู้ใช้ที่แสดงรายการในไฟล์นี้เท่านั้นที่สามารถใช้คำสั่ง crontab

หากไม่มีไฟล์อยู่ผู้ใช้ที่มีสิทธิ์การดูแลระบบสามารถใช้คำสั่ง crontab ได้

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

ด้านล่างนี้เป็นตัวอย่างงาน cron ซึ่งจะแสดงวิธีกำหนดเวลางานให้ทำงานในช่วงเวลาที่แตกต่างกัน

  • รันคำสั่งเวลา 15:00 น. ทุกวันตั้งแต่วันจันทร์ถึงวันศุกร์:

    0 15 * * 1-5 command

    เรียกใช้สคริปต์ทุก 5 นาทีและเปลี่ยนเส้นทางเอาต์พุตมาตรฐานเป็น dev null เฉพาะข้อผิดพลาดมาตรฐานเท่านั้นที่จะถูกส่งไปยังที่อยู่อีเมลที่ระบุ:

    [email protected] */5 * * * * /path/to/script.sh > /dev/null

    เรียกใช้สองคำสั่งทุกวันจันทร์เวลา 15.00 น. (ใช้โอเปอเรเตอร์ && ระหว่างคำสั่ง):

    0 15 * * Mon command1 && command2

    รันสคริปต์ PHP ทุก 2 นาทีและเขียนผลลัพธ์ลงในไฟล์:

    */2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log

    เรียกใช้สคริปต์ทุกวันทุกชั่วโมงทุกชั่วโมงตั้งแต่ 8.00 น. ถึง 16.00 น.:

    00 08-16 * * * /path/to/script.sh

    เรียกใช้สคริปต์ในวันจันทร์แรกของทุกเดือนเวลา 7 โมงเช้า

    0 7 1-7 * 1 /path/to/script.sh

    เรียกใช้สคริปต์เวลา 09:15 น. ในวันที่ 1 และ 15 ของทุกเดือน:

    15 9 1, 15 * * /path/to/script.sh

    ตั้งค่าตัวแปร HOME , PATH , SHELL และ MAILTO กำหนดเองและรันคำสั่งทุกนาที

    HOME=/opt PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/usr/bin/zsh [email protected] */1 * * * * command

ข้อสรุป

คุณได้เรียนรู้วิธีสร้างงาน cron และกำหนดเวลางานตามวันและเวลาที่กำหนด

อย่าลังเลที่จะแสดงความคิดเห็นหากคุณมีคำถามใด ๆ

cron crontab terminal