ฉันต้องการกำหนดเวลาให้งานทำงานเป็นประจำและเคยได้ยินว่า Cron เป็นวิธีการทำเช่นนี้
ฉันจะเพิ่มงาน Cron ใน Ubuntu ได้อย่างไร
ฉันต้องการกำหนดเวลาให้งานทำงานเป็นประจำและเคยได้ยินว่า Cron เป็นวิธีการทำเช่นนี้
ฉันจะเพิ่มงาน Cron ใน Ubuntu ได้อย่างไร
คำตอบ:
ใส่เชลล์สคริปต์ในโฟลเดอร์เหล่านี้: /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 คือวันอาทิตย์
*/15 * * * * /path/to/command
ทำเช่นนั้น@reboot /path/to/command
เพื่อที่จะดำเนินการบางอย่างเมื่อเริ่มต้น
หากงานที่คุณต้องการเรียกใช้สามารถรันด้วยสิทธิ์แบบเดียวกับผู้ใช้ของคุณฉันแนะนำให้ใช้ผู้ใช้ 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
หากคุณต้องการใช้ GUI คุณสามารถไปที่ Software Center และติดตั้งงานตามกำหนดเวลา (หรือเรียกใช้sudo apt-get install gnome-schedule
) มันจะให้ GUI ที่มีประสิทธิภาพเพื่อเพิ่มงาน cron
โปรดทราบว่าหากคุณใช้วิธีนี้งานตามค่าเริ่มต้นจะถูกดำเนินการในฐานะผู้ใช้ของคุณเองไม่ใช่ในฐานะรูท นี่เป็นสิ่งที่ดี
ผมขอแนะนำให้KDE ของ Task Scheduler (kde-config-cron
) เข้าถึงได้จากการตั้งค่าระบบในโมดูลตัวกำหนดเวลางานที่นั่น
มันจัดการทั้งส่วนบุคคลและระบบ Crontabs และความง่ายในการสร้างขอบเขตเวลาทำให้ฉันประหลาดใจอย่างมาก (ดูภาพด้านล่าง) ฉันคิดว่าส่วนนี้ underrated จริงๆ
KDE Task Scheduler จะไม่ทำงานใน Ubuntu ปกติ ใช้งานได้เฉพาะในระบบ KDE เช่น KUbuntu สำหรับระบบที่ไม่ใช่ KDE คุณจะต้องการใช้ gnome-schedule
$ sudo apt-get install gnome-schedule
แอพนี้ถูกจัดตารางงานใน Dash
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
ฉันต้องการตั้งค่างาน 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
ตัวอย่างการรันสคริปต์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)