ฉันจะตั้งค่างาน Cron ได้อย่างไร


534

ฉันต้องการกำหนดเวลาให้งานทำงานเป็นประจำและเคยได้ยินว่า Cron เป็นวิธีการทำเช่นนี้

ฉันจะเพิ่มงาน Cron ใน Ubuntu ได้อย่างไร

คำตอบ:


655

ใส่เชลล์สคริปต์ในโฟลเดอร์เหล่านี้: /etc/cron.daily, /etc/cron.hourly, หรือ/etc/cron.monthly/etc/cron.weekly

หากสิ่งเหล่านี้ไม่เพียงพอสำหรับคุณคุณสามารถเพิ่มงานเฉพาะเช่นเดือนละสองครั้งหรือทุก ๆ 5 นาที ไปที่เทอร์มินัลแล้วพิมพ์:

crontab -e

นี่จะเปิด crontab ส่วนบุคคลของคุณ (ไฟล์กำหนดค่า cron) บรรทัดแรกในไฟล์นั้นอธิบายได้ทั้งหมด! ในทุกบรรทัดคุณสามารถกำหนดหนึ่งคำสั่งเพื่อเรียกใช้และกำหนดเวลาและรูปแบบนั้นค่อนข้างง่ายเมื่อคุณได้รับการหยุด โครงสร้างคือ:

minute hour day-of-month month day-of-week command

สำหรับตัวเลขทั้งหมดที่คุณสามารถใช้รายการเช่น5,34,55ในฟิลด์นาทีจะหมายถึงการรันที่ 5 ที่ผ่านมา 34 ที่ผ่านมาและ 55 ที่ผ่านมาสิ่งที่กำหนดไว้

คุณยังสามารถใช้ช่วงเวลา */20พวกเขามีการกำหนดเช่นนี้ ตัวอย่างนี้หมายความว่าทุกคนที่ 20 0,20,40ดังนั้นในคอลัมน์นาทีมันจะเทียบเท่ากับ

ดังนั้นให้เรียกใช้คำสั่งทุกวันจันทร์เวลา 5:30 ในตอนบ่าย

30 17 * * 1 /path/to/command

หรือทุกๆ 15 นาที

*/15 * * * * /path/to/command

โปรดทราบว่าวันในสัปดาห์ไปจาก 0-6 โดยที่ 0 คือวันอาทิตย์

คุณสามารถอ่านเพิ่มเติมที่นี่


7
เหล่านี้เป็นระบบทั้งระบบและทำงานด้วยสิทธิพิเศษสูง ฉันจะไม่ใส่อะไรเลยเว้นแต่จะมีความจำเป็นเร่งด่วนในการเข้าถึงหรือการอนุญาต ตามกฎง่ายๆให้ลองทำสิ่งที่ไม่มีความสามารถ ดังนั้นฉันชอบคำตอบนี้ดีกว่า: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales

5
@Marcelo Morales ซึ่งจะรันคำสั่งที่กำหนดเป็น root! ถ้าคุณไม่ใช้ sudo คุณจะสร้างผู้ใช้ crontab และสิ่งนี้จะถูกเรียกใช้ในฐานะผู้ใช้ที่สร้างมันขึ้นมา!
LassePoulsen

4
* / 15 * * * * / เส้นทาง / ถึง / คำสั่งมีประโยชน์มากสำหรับฉัน! ขอบคุณ!
Andrew Odendaal

18
การเปลี่ยนแปลงเหล่านี้จะมีผลโดยอัตโนมัติคุณไม่จำเป็นต้องรีสตาร์ท / โหลดซ้ำสิ่งใด
Molomby

6
เคล็ดลับที่มีประโยชน์อีกข้อหนึ่งก็คือแทนที่จะ*/15 * * * * /path/to/commandทำเช่นนั้น@reboot /path/to/commandเพื่อที่จะดำเนินการบางอย่างเมื่อเริ่มต้น
Kenneth Worden

102

หากงานที่คุณต้องการเรียกใช้สามารถรันด้วยสิทธิ์แบบเดียวกับผู้ใช้ของคุณฉันแนะนำให้ใช้ผู้ใช้ crontab ซึ่งคุณสามารถแก้ไขได้ด้วยการรันEDITOR="gedit" crontab -e(ซึ่งจะใช้ gedit เพื่อแก้ไขไฟล์ crontab) หรือเพียงแค่crontab -e(ซึ่งจะใช้โปรแกรมแก้ไขเริ่มต้น) ในอาคารผู้โดยสาร

หากคุณต้องการเรียกใช้บางสิ่งบางอย่างทุก 10 นาทีคุณจะต้องเพิ่มบรรทัดเช่นนี้

*/10 * * * * /usr/bin/somedirectory/somecommand

และบันทึกไฟล์

คุณสามารถดูเนื้อหาของ crontab crontab -lผู้ใช้ที่มี

ในการเพิ่มงาน cron ที่ทำงานเป็นรากคุณสามารถแก้ไข crontab sudo crontab -eรากโดยการเรียกใช้

วิธีที่ยืดหยุ่นที่สุดคือการใช้ crontab ของระบบ/etc/crontabซึ่งคุณสามารถแก้ไขได้ด้วยสิทธิ์ของรูทเท่านั้น ในไฟล์นี้ผู้ใช้แต่ละคำสั่งจะต้องถูกเรียกใช้ตามที่ระบุไว้ดังนั้นคุณสามารถเรียกใช้คำสั่งของคุณในฐานะรูท (ในกรณีที่คุณต้องการสิทธิ์ระดับนั้น) หรือผู้ใช้อื่น ๆ บนระบบ

ตัวอย่างเช่นหากคุณต้องการรันอะไรบางอย่างในทุก ๆ 10 นาทีในฐานะรูทคุณจะต้องเพิ่มบรรทัดแบบนี้

*/10 * * * * root /usr/bin/somedirectory/somecommand

(สังเกตเห็นการเพิ่มผู้ใช้ในบรรทัด)

คุณสามารถดูเนื้อหาของไฟล์ระบบ crontab cat /etc/crontabที่มี

รายละเอียดเพิ่มเติมได้ที่: https://help.ubuntu.com/community/CronHowto


1
นี่คือเครื่องมือจัดการ cron แบบอินเตอร์แอคทีฟแสนหวานที่จะมอบภาษาอังกฤษให้กับ cron time crontab.guru
CTS_AE

52

หากคุณต้องการใช้ GUI คุณสามารถไปที่ Software Center และติดตั้งงานตามกำหนดเวลา (หรือเรียกใช้sudo apt-get install gnome-schedule) มันจะให้ GUI ที่มีประสิทธิภาพเพื่อเพิ่มงาน cron

โปรดทราบว่าหากคุณใช้วิธีนี้งานตามค่าเริ่มต้นจะถูกดำเนินการในฐานะผู้ใช้ของคุณเองไม่ใช่ในฐานะรูท นี่เป็นสิ่งที่ดี


3
ไม่พร้อมใช้งานสำหรับ 16.04 apparently bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash

@TankorSmash คุณสามารถรับได้ที่นี่
M. Becerra

ไม่สามารถทำตามข้อกำหนดของแพ็คเกจได้ใน 16.04
Odysseus Ithaca

26

ผมขอแนะนำให้KDE ของ Task Scheduler (kde-config-cron ติดตั้ง kde-config-cron ) เข้าถึงได้จากการตั้งค่าระบบในโมดูลตัวกำหนดเวลางานที่นั่น

มันจัดการทั้งส่วนบุคคลและระบบ Crontabs และความง่ายในการสร้างขอบเขตเวลาทำให้ฉันประหลาดใจอย่างมาก (ดูภาพด้านล่าง) ฉันคิดว่าส่วนนี้ underrated จริงๆ

ป้อนคำอธิบายรูปภาพที่นี่


11

KDE Task Scheduler จะไม่ทำงานใน Ubuntu ปกติ ใช้งานได้เฉพาะในระบบ KDE เช่น KUbuntu สำหรับระบบที่ไม่ใช่ KDE คุณจะต้องการใช้ gnome-schedule

$ sudo apt-get install gnome-schedule

แอพนี้ถูกจัดตารางงานใน Dash


ไม่พบ Ubuntu 16.04
SaidbakR

โปรดดูได้ที่I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/... มีแพ็คเกจให้ดาวน์โหลด @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . เพิ่งแสดง$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio

10

ฉันต้องการตั้งค่างาน Cron ให้ทำงานผ่านสคริปต์ทุบตีดังนั้นการใช้งานสคริปต์จะเพิ่มงาน cron

ฉันรู้ว่าเมื่อคุณใช้ประโยชน์จาก:

crontab -e 

จากนั้นจะสร้างไฟล์:

/var/spool/cron/crontabs/root

โดยที่ root คือชื่อของผู้ใช้ที่รันคำสั่ง crontab ดังนั้นตามนี้และอย่างน้อย 14.04 เราสามารถรันคำสั่ง bash ต่อไปนี้เพื่อสร้างงาน Cron ใหม่:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

เราต้องตั้งค่าความเป็นเจ้าของที่ถูกต้องสำหรับไฟล์ด้วย:

chown root:root /var/spool/cron/crontabs/root

และตั้งค่าการอนุญาตที่ถูกต้อง:

chmod 600 /var/spool/cron/crontabs/root

หากเมื่อคุณรันcrontab -eมีงาน Cron อยู่แล้วในรายการคุณสามารถผนวกรายการโดยใช้คำสั่งต่อไปนี้:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root

2

ตัวอย่างการรันสคริปต์test_cron.shโดย cron ทุกนาทีใน Ubuntu 18.04 โดยใช้ลิงก์สัญลักษณ์:

test_cron.sh ไฟล์:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

หากคุณต้องการใช้ตัวแปรสภาพแวดล้อมในสคริปต์ของคุณเช่นเดียวกับ$USERในพา ธ การพิมพ์เส้นทางที่แม่นยำจะดีกว่าการทุบตีจะไม่ทราบตัวแปรของคุณในขณะดำเนินการ

myname เป็นชื่อผู้ใช้ (ส่วนหนึ่งของกลุ่มรากฉันไม่แน่ใจว่าจำเป็นต้องใช้สิทธิ์รูทหรือไม่)

อนุญาตให้ผู้ใช้ตั้งค่างาน cron ไฟล์จะถูกสร้างขึ้นหากจำเป็น:

sudo nano /etc/cron.allow

root
myname

เส้นทางไปยังสคริปต์คือ /home/myname/shell/test_cron.sh

ฉันเปลี่ยนเจ้าของและทำให้มันใช้งานได้:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

ฉันเพิ่มลิงก์สัญลักษณ์:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

บันทึกเมื่อmynameฉันเพิ่มงานใหม่เพื่อดำเนินการtest_cronทุกนาที

crontab -e

*/1 * * * * test_cron

ในการตรวจสอบว่าคำสั่งในรายการ:

crontab -l

*/1 * * * * test_cron

เพื่อตรวจสอบการดำเนินการ

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.