ราก crontab จะไม่บันทึก


6

ฉันกำลังพยายามเพิ่มรายการ crontab ให้กับผู้ใช้ root ของฉัน ฉันสามารถเพิ่มรายการโดยไม่มีปัญหาใน crontab ของผู้ใช้ทั่วไปของฉัน แต่เมื่อฉัน su เพื่อผู้ใช้รูทและลองเพิ่มรายการ crontab มันไม่ได้บันทึกรายการ

กระบวนการที่ฉันกำลังทำอยู่คือ:

$sudo su
$crontab -e
# write out my crontab entry and then :wq to write and quit vi
$crontab -l
crontab: no crontab for root

ฉันยังพยายามออกจาก vi โดยใช้ wq! และมันจะยังไม่บันทึกรายการ

รายการที่ฉันเข้าคือ:

* * * * * /sayhi.sh

sayhi.sh เป็นสคริปต์เชลล์แบบง่าย ๆ ที่ฉันใช้เพื่อพยายามตรวจสอบว่างาน cron กำลังทำงานอยู่

มีอะไรที่แตกต่างที่ฉันต้องทำถ้าฉันพยายามสร้างรายการ crontab สำหรับรูท? ฉันได้ดูไปรอบ ๆ และฉันไม่ได้เห็นอะไรเกี่ยวกับ crontab ที่เฉพาะเจาะจงกับผู้ใช้รูท

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม!


คำตอบ:


4

คำสั่งของคุณควรใช้งานได้จริง แต่ก็ไม่เป็นอย่างที่ฉันต้องการ

ลองแทน: -

sudo crontab -e -u root

จากนั้นไปที่รายการ: -

sudo crontab -l -u root

ตามกฎทั่วไปฉันไปมากปัญหา ไม่เคย รันรูทเชลล์ เมื่อฉันฉันจะใช้ sudo -s ค่อนข้างมากกว่า sudo su.

เมื่อคุณออกจาก vi คุณจะเห็นสองบรรทัด: -

crontab: no crontab for root - using an empty one
crontab: installing new crontab

หากคุณไม่ได้รับสองบรรทัดคุณมีปัญหาร้ายแรง ถ้าคุณทำแล้วคำสั่งรายการจะไม่แสดงสิ่งใดฉันจะสงสัยว่าปัญหาการอนุญาต

ฉันจะไม่ใช้บรรทัดตัวอย่างของคุณเมื่อคุณขอให้ระบบเรียกใช้ "sayhi.sh" วันละครั้งทุกวันทุกวัน ฉันยังสงสัยเกี่ยวกับเส้นทาง "/sayhi.sh" - คุณมีสคริปต์ที่ด้านบนสุดของไดรฟ์สำหรับบูตของคุณหรือไม่? นั่นไม่ใช่ความคิดที่ดีหรือคุณอาจหมายถึง "~ / sayhi.sh" ซึ่งในกรณีนี้จะอยู่ในโฮมไดเร็กตอรี่ราก (ปกติ / var / root) หรือคุณหมายถึง ของคุณ ไดเรกทอรีบ้าน ในไฟล์ crontab วิธีที่ดีที่สุดคือให้กำหนดรหัสเส้นทางทั้งหมด

นอกจากนี้คุณยังทราบว่าเอาต์พุต tany ของงาน cron จะไม่ไปที่เทอร์มินัลใด ๆ แต่จะถูกส่งไปที่ root แทน (โดยค่าเริ่มต้น)

หากคุณต้องการตรวจสอบว่า cron กำลังทำงานง่าย ๆ

*/5 * * * *   echo "CRON" > /Users/myname/.cronout

จะทำเช่นนั้น (ฟิลด์แรกจะเรียกใช้งานอย่างสมเหตุสมผลมากกว่าทุก ๆ 5 นาที)

crontabs นั้นถูกเก็บไว้ใน / usr / lib / cron / tabs /usr/lib/cron เป็นลิงก์ไปยัง /var/at และถ้าคุณไปที่นั่นคุณจะพบ tabs ไดเรกทอรีและยัง cron.deny ไฟล์. ตรวจสอบว่าไม่มีใครได้เพิ่มรูทลงในนั้นและหากคุณยังไม่มีความปิติยินดีคุณอาจลอง:

echo > /var/at/tabs/root

ซึ่งควรสร้างไฟล์เปล่าที่คุณสามารถแก้ไข


ทำงาน ~ ใน crontab - ฉันจะให้เส้นทางที่เต็ม
Mark

@ Mark - ใช่แล้ว มันไปที่บ้านของเจ้าของ crontab แต่อย่างคุณฉันมักจะเข้ารหัสเส้นทางใน crontabs (และเชลล์สคริปต์และฟังก์ชันทุบตี)
Tony Williams

@TonyWilliams, 'sayhi.sh' ที่ระดับรากและทุก ๆ นาทีนั้นมีจุดประสงค์เพื่อการทดสอบเท่านั้น เชลล์สคริปต์จริงที่ฉันต้องการเรียกใช้อยู่ในโฟลเดอร์ภายในบ้านของฉันและในที่สุดจะทำงานในช่วงเวลาหนึ่งเดือน ฉันจะให้คำแนะนำของคุณลอง ขอบคุณ!
Chris Schmitz

อืมดังนั้นฉันได้ผ่านและตั้งค่า crontab ของรูทของฉันตามที่คุณแนะนำ (ขอบคุณสำหรับการชี้ให้เห็น sudo flag btw) แม้ว่าเมื่อฉันเขียนและออกจาก crontab รูทมันก็ยังให้ข้อความแก่ฉัน crontab: no crontab for root และไม่บันทึกรายการงาน คุณบอกว่ามันอาจเป็นปัญหาการอนุญาตคุณมีข้อเสนอแนะเกี่ยวกับการอนุญาตของไฟล์ที่ฉันควรตรวจสอบหรือไม่? แนวคิดของผู้ใช้รูทที่ไม่ได้รับอนุญาตให้ใช้งานกับไฟล์ใดไฟล์หนึ่งดูเหมือนว่าแปลกใช่ไหม?
Chris Schmitz

ฉันจะบูตดิสก์อื่นแล้วเรียกใช้ "แก้ไขการอนุญาต" ใน Disk Utility
Tony Williams

0

ฉันมีปัญหาเดียวกัน นี่คือสิ่งที่ทำงานให้ฉัน (และโดย "ทำงาน" ฉันหมายถึงฉันสามารถรับงาน cron ให้ทำงานเป็น root)

sudo bash -login            # su always tries to force me to change my password >:[
vi /usr/lib/cron/tabs/root  # Just edit it directly

chmod 600 /usr/lib/cron/tabs/root

งานที่คุณใส่จะทำงาน แต่ crontab -e ยังไม่ทำงานแม้ว่าจะสร้าง crontab แล้ว

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