วิธีที่ถูกต้องในการแก้ไขไฟล์ crontab คืออะไร?


52

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

ฉันทำตามคำแนะนำที่นี่ community / AWStats

และมันบอกว่าจะไปที่ไฟล์ที่: /etc/crontab

ไฟล์นั้นมีข้อมูลอยู่ในนั้นแล้ว นี่เป็นcrontabไฟล์หลักหรือบางอย่าง? crontab -eฉันได้เห็นคำแนะนำบางออนไลน์เพื่อใช้ไฟล์ที่ปรากฏขึ้นกับ

ไฟล์ที่เหมาะสมในการใช้คืออะไรและวิธีที่ดีที่สุดในการทำเช่นนี้?

หากฉันกำหนดเวลางานในฐานะผู้ใช้ที่ไม่ใช่รูทของฉันมันจะทำงานด้วยตัวเองในช่วงเวลาตามที่ระบุโดยไม่มีปัญหาหรือไม่

ฉันต้องรีสตาร์ทเซิร์ฟเวอร์หลังจากบันทึกงาน cron ในcrontabไฟล์ก่อนที่จะเริ่มทำงานหรือไม่

คำตอบ:


50

ไฟล์ที่เหมาะสมในการใช้คืออะไรและวิธีที่ดีที่สุดในการทำเช่นนี้?

crontab -e เป็นวิธีที่ดีที่สุดที่จะทำ - สิ่งนี้จะช่วยให้คุณแก้ไข crontabs ต่อผู้ใช้ได้ง่าย

หากฉันกำหนดเวลางานในฐานะผู้ใช้ที่ไม่ใช่รูทของฉันมันจะทำงานด้วยตัวเองในช่วงเวลาตามที่ระบุโดยไม่มีปัญหาหรือไม่

ใช่แล้วมันจะทำงานด้วยสิทธิ์ของบัญชีผู้ใช้นั้น

โดยหลักการแล้วจะเป็นการดีที่สุดที่จะรันงานที่กำหนดเวลาไว้ด้วยสิทธิ์ต่ำสุดที่คุณสามารถหลีกเลี่ยงได้ดังนั้นหากสิ่งที่คุณกำลังทำอยู่ไม่จำเป็นต้องใช้รูทอย่าใช้รูท หากคุณไม่จำเป็นต้องสามารถเข้าถึงไฟล์และโฟลเดอร์ของบัญชีของคุณคุณสามารถสร้างผู้ใช้ใหม่และใช้บัญชีผู้ใช้นั้นสำหรับงานนั้นเท่านั้น ในทางตรงกันข้ามถ้างานของคุณไม่จำเป็นต้องมีราก crontab ใช้ราก ( su/ sudo suรากแล้วใช้crontab -e)

ฉันต้องรีสตาร์ทเซิร์ฟเวอร์หลังจากบันทึกงาน cron ในไฟล์ crontab ก่อนที่จะเริ่มทำงานหรือไม่

ไม่เลยมันจะเริ่มทำงานได้ทันที

ทำไมไม่แก้ไขไฟล์โดยตรง มันตั้งอยู่ที่ไหน?

ไฟล์ crontab ของผู้ใช้จะอยู่ใน/var/spool/cron/crontabsแต่สิทธิ์ของพวกเขาจะถูกตั้งค่าในลักษณะที่พวกเขาไม่สามารถข้ามไปโดยไม่ได้รับอนุญาต superuser (แต่เมื่อเปิดและกระบวนการ cron ลดสิทธิพิเศษก็ยังสามารถเข้าถึงไฟล์)

ระบบไม่ได้ออกแบบมาสำหรับผู้ใช้ปลายทางในการแก้ไขไฟล์เหล่านี้โดยตรงและด้านบนสุดของไฟล์มีDO NOT EDIT THIS FILEคำเตือนที่เข้มงวดที่ด้านบนของเอฟเฟกต์นี้ ไฟล์ถูกออกแบบมาให้แก้ไขผ่านcrontab -eซึ่งจะตั้งค่ามิเรอร์ชั่วคราวของไฟล์/tmpเพื่อแก้ไข - โดยไม่มีการเตือนแบบเข้มงวด - หลังจากนั้นจะทำการตรวจสอบและติดตั้งไฟล์ crontab แบบถาวรนั้นเอง ทั้งหมดนี้สามารถทำได้โดยไม่ได้รับอนุญาตจากผู้ใช้ขั้นสูง

หากคุณแก้ไขไฟล์ crontab โดยตรงฉันไม่ทราบว่าผลลัพธ์จะเป็นอย่างไร อาจเป็นไปได้ว่าจะไม่มีผลจนกว่าจะรีสตาร์ทครั้งถัดไปและข้อผิดพลาดใด ๆ อาจเป็นการยากที่จะทำการดีบัก


5
crontab -eช่วยให้คุณสามารถแก้ไขผู้ใช้ crontab โดยไม่ต้อง sudo ผู้ใช้ crontabs /var/spool/cron/crontabsซึ่งเป็นไดเรกทอรีที่ไม่สามารถเข้าถึงได้โดยไม่ได้รับอนุญาตจากผู้ใช้ขั้นสูง (แต่ในลักษณะที่เมื่อ cron ยกเลิกสิทธิ์ผู้ใช้จะยังสามารถอ่านได้) แม้ว่าคุณจะใช้ sudo เพื่อลองและแก้ไขไฟล์โดยตรงคุณจะเห็นคำเตือนขนาดใหญ่ที่ด้านบน "ห้ามแก้ไขไฟล์นี้" - ไฟล์ถูกออกแบบมาให้แก้ไขโดยใช้crontabคำสั่งซึ่งใช้สำเนาชั่วคราวใน/tmpและติดตั้ง มันหลังจากที่คุณบันทึก
thomasrutter

25

crontabผู้ใช้ทุกคนมีเป็นของตัวเอง

หากต้องการดูเพียงพิมพ์

crontab -l

และใช่คุณเห็นถูกต้องเมื่อคุณต้องการเพิ่มcrontabเพียงทำ

crontab -e

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

crontab นั้นทำงานเช่นนี้

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

เช่นเพื่อเริ่มงานทุก ๆ 15 นาทีในวันจันทร์คุณทำเช่นนั้น

*/15 * * * mon /home/me/yourscript.sh

และใช่เป็นสิ่งสำคัญมากที่คุณจะต้องใส่ cronjob ของคุณลงใน crontab ของผู้ใช้ซึ่งมีสิทธิ์เพียงพอที่จะดำเนินการ

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

สำคัญมาก!

cronjob เป็นใบ้! ใช่ฉันพูดแล้ว ตรวจสอบให้แน่ใจเสมอว่าได้ป้อนเส้นทางแบบเต็มไปยังที่application/command/scriptคุณใช้อยู่เพราะ crontab จะไม่ทำงาน.bashrcหรือคล้ายกัน คุณต้องตรวจสอบให้แน่ใจว่าคุณบอก cron เสมอว่าสามารถหาไฟล์และไดเรกทอรีได้ที่ไหน

ในการตอบคำถามที่เหลือของคุณ:

แน่นอนมันจะทำงานด้วยตัวเองนั่นคือสิ่งที่มันมีไว้ แต่คุณต้องตรวจสอบ cronjob ว่ามันจริง ๆ หรือถ้ามันหายไปบางสิ่งบางอย่าง เช่นเข้าสู่ logfile เพื่อดูว่ามันใช้งานได้จริง

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


เพื่อตรวจสอบคุณตรวจสอบรูปแบบเวลานี้เว็บไซต์crontab.guru
Astm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.