crontab ของผู้ใช้จัดเก็บอยู่ที่ไหน


249

ตั้งแต่การอัพเกรด crontab ของผู้ใช้ของฉันถูกลบไปแล้ว นี่ไม่ใช่ครั้งแรกที่เกิดขึ้นในปีนี้และมันก็เป็นความเจ็บปวดในการฟื้นฟูทุกครั้ง

ฉันต้องการสำรองข้อมูล crontab สำหรับผู้ใช้ของฉัน แต่ฉันต้องการทราบว่ามันเก็บไว้ที่ไหน


4
มันจะดีถ้ามีใครบางคนสามารถให้เหตุผลว่าทำไมมันถูกกำจัดออกไป
Walter Tross

1
@WalterTross ใช่มันค่อนข้างน่ารำคาญ ฉันเดาว่ามันเป็นผลข้างเคียงของการอัพเดตcronแพ็คเกจ แต่ฉันเห็นด้วย - ไม่ใช่สิ่งที่ควรเกิดขึ้น
Oli

เอ่อฉันไม่ได้ cron ผู้ใช้ที่ได้รับการเช็ดต่อการอัพเกรดแพคเกจ cron!
pl1nk

@ pl1nk ฉันไม่รู้ว่ามันกำลังล้างอะไร แต่มันก็เกิดขึ้นต่อไป ฉันคิดว่าผีในเครื่อง
Oli

ตารางผู้ใช้จะถูกเก็บไว้ในพื้นที่ชั่วคราว / var / spool / cron / crontabs / $ USER ดังนั้นอาจถูกลบในการบูตหรืออัพเกรดครั้งต่อไป
fcm

คำตอบ:


325

ที่จริงแล้วไม่แนะนำให้จัดการไฟล์เหล่านั้นด้วยมือ ต่อหน้าcrontabคน:

ผู้ใช้แต่ละคนสามารถมี crontab ของตัวเองและแม้ว่า
จะเป็นไฟล์ใน/var/spool/cron/crontabsพวกเขาไม่ได้
ตั้งใจที่จะแก้ไขโดยตรง

ไฟล์ที่อยู่ภายใต้การ/var/spoolได้รับการพิจารณาชั่วคราว / การทำงานที่ว่าทำไมพวกเขาอาจได้รับการลบในระหว่างการอัพเกรดแม้มองใกล้ที่cronแพคเกจของสคริปต์อัพเกรดอาจหลั่งน้ำตาแสงบางอย่างเกี่ยวกับเรื่องนี้

อย่างไรก็ตามมันเป็นวิธีที่ดีในการสำรองข้อมูล cron ของคุณหรือเก็บไว้ในไฟล์ในโฮมไดเร็กตอรี่ของคุณ

ฉันคิดว่าคุณกำลังใช้crontab -eเพื่อสร้างไฟล์ crontab ได้ทันที ถ้าเป็นเช่นนั้นคุณจะได้รับ "คัดลอก" ของไฟล์ crontab crontab -lของคุณโดยทำ ไพพ์ไปยังไฟล์เพื่อรับ "backup":

crontab -l > my-crontab

จากนั้นคุณสามารถแก้ไขไฟล์ my-crontab เพื่อเพิ่มหรือแก้ไขรายการและจากนั้น "ติดตั้ง" โดยให้มันแก่ crontab:

crontab my-crontab

crontab -eนี้ไม่ไวยากรณ์เดียวกันการตรวจสอบเป็น


7
crontab -lทำได้ง่ายกว่าการผ่าน/var/spool/cron/crontabs/$USERเพราะการอนุญาตที่แปลกประหลาดในไฟล์นั้น
Oli

1
iptables-saveของ cron ดี ...
คู่ปรับยิง

4
บางทีเราควรใส่ crontab เพื่อสำรองข้อมูลเองโดยอัตโนมัติ> :)?
PascalVKooten

4
การจิ้มผ่าน/var/spool/cron/crontabsมีประโยชน์เมื่อคุณต้องการดูแลหรือตรวจสอบ crontabs จากผู้ใช้หลายคน
dhasenan

1
เมื่อตรวจสอบความลึกลับบนเซิร์ฟเวอร์ที่คุณไม่คุ้นเคยกับมันเป็นเรื่องธรรมดาที่จะsudo grep -rHin "$string" /etc/cron*(ที่สตริงอาจจะมีคำสั่งเช่นdocker, lftp, iptablesฯลฯ มันเป็นความคิดที่ดีที่จะตรวจสอบ crontabs ผู้ใช้ยังนั่นคือสิ่งที่ทำให้ฉัน Q & A นี้..sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
บรูโน่ Bronosky


30

ในที่สุดฉันก็พบว่าทำไม crontabs และการติดตั้ง Postfix ของฉันจึงแตกหลังจากบูต มันเป็นเหตุผลที่โง่มาก ๆ แต่ ...

ฉัน/var/spoolติดตั้งเป็นtmpfsRAM-drive

ฟังดูเป็นเรื่องงี่เง่า แต่ฉันได้ติดตาม SSD-tweaks ตัวเก่าเพื่อยืดอายุการใช้งานของ SSD ของฉัน ในการทำเช่นนั้นฉันสุ่มสี่สุ่มห้าติด/tmp, /var/tmpและ/var/spoolเป็นtmpfsโดยไม่คิดผลกระทบ ฉันคิดว่า/var/spoolเหมือน/proc/หรือ/run/ว่ามันมีประโยชน์สำหรับช่วงเวลาของเซสชั่น ฉันผิดอย่างชัดเจน


8
มันควรจะปลอดภัยในการติดตั้ง/tmpเป็น tmpfs แต่ไม่ได้หรือ /var/tmp ใช้สำหรับการจัดเก็บชั่วคราวที่อาจหายไปเมื่อรีบูต ใช้สำหรับการจัดเก็บชั่วคราวที่จะยังคงอยู่หลังจากรีบูต และตามที่คุณค้นพบมีไว้สำหรับประมวลผลข้อมูลซึ่งจะยังคงอยู่หลังจากรีบูต /var/spool/tmp/var/tmp/var/spool
thomasrutter


2
โปรดทราบว่าการนับการเขียนนั้นไม่มีปัญหากับ SSD ที่ทันสมัยอีกต่อไป
thomasrutter

17

ในการแสดงรายการงาน cron ทั้งหมดจากผู้ใช้ทั้งหมดในระบบของคุณ:

for user in $(cut -f1 -d: /etc/passwd)
do
  echo $user
  crontab -u $user -l
done

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

00 01 * * * user /home/user/user-script.sh

หากคุณกำลังกู้คืน crontab จากไดรฟ์อื่นสิ่งนี้จะไม่ทำงานเพราะcrontab -uทำงานจากระบบปัจจุบันของคุณ
JVE999

ในขณะที่ฉันคิดว่าเป็นหนึ่งซับในที่เหมาะกับน้อยกว่า 80 ตัวอักษรและค่อนข้างอ่านได้โดยทั่วไปฉันชอบใส่รหัสในรูปแบบที่บุคคลสามารถคัดลอกวางหรือวางไว้ในสคริปต์ (และ, ในสคริปต์นี้จะไม่เป็นหนึ่งบรรทัดของรหัส) แนะนำการแก้ไข ...
Parthian Shot

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