Crontab ไม่เคยทำงานขณะอยู่ใน /etc/cron.d


32

นี่คือสิ่งที่ฉันทำกับ Debian Jessie:

  • ติดตั้ง cron ผ่าน apt-get install cron
  • ใส่backup_crontabไฟล์ใน/etc/cron.d/

อย่างไรก็ตามงานไม่เคยทำงาน

นี่คือผลลัพธ์บางส่วน:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

มีสิ่งที่ต้องทำเพื่อเปิดใช้งาน crontab โดยเฉพาะหรือเพื่อเปิดใช้งาน cron "service" ในตัวเอง?


4
ถ้าหากมันทำงานและล้มเหลวโดยมีข้อผิดพลาดคุณจะไม่เห็นเพราะคุณเปลี่ยนเส้นทางเอาต์พุตทั้งหมดเป็น / dev / null :)
ทิงค์

@tink เป็นไปได้หรือไม่ที่จะผนวกเอาต์พุตไปที่ท้ายไฟล์แทน?
Jivan

2
แน่นอนคือ; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink

@Jivan เพียงข้อสังเกตเล็ก ๆ : ls /etc/cron.dเทียบเท่ากับcd /etc/cron.d && lsในแง่ของการส่งออก ความแตกต่างเพียงอย่างเดียวคือไดเรกทอรีที่ใช้งานได้จะไม่เปลี่ยนแปลง
Drew Chapin

คำตอบ:


49

ไฟล์ที่/etc/cron.dจำเป็นต้องมีเพื่อแสดงรายการผู้ใช้ที่ต้องรันงาน

กล่าวคือ

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

คุณควรตรวจสอบสิทธิ์และเจ้าของ: ตั้งกลุ่มไว้อย่างถูกต้อง ( -rw-r--r--และเป็นเจ้าของโดยroot:root)


16
crontab -lรายงานเกี่ยวกับรายการ cron ใน/var/spool/cron/crontabs/- เช่นต่อผู้ใช้ crontabs /etc/cron.dไฟล์ crontabs crontab -lระบบและการไม่ได้รับการรายงานจาก
Stephen Harris

5
ที่จริงฉันพูดถึงว่ามันใช้งานไม่ได้ แต่ฉันเพิ่งรู้ว่ามันเป็นหลังจากที่มีการเพิ่มrootในไฟล์ - เพียงแค่crontab -lไม่ได้พูดถึงมันตามที่คุณอธิบายว่าทำไม - ขอบคุณสำหรับความช่วยเหลือของคุณ
Jivan

9
ดูเหมือนว่าชื่อไฟล์ก็มีบทบาทเช่นกัน ในกรณีของฉันฉันได้เพิ่มลงในetc/cron.dไฟล์ที่มีจุดอยู่ตรงกลางชื่อและงานไม่เคยถูกดำเนินการจนกว่าฉันจะเปลี่ยนชื่อ
pic

20
ปัญหาเดียวกันที่นี่ขีดคั่น "-" ในชื่อไฟล์การเปลี่ยนเป็นขีดล่าง "_" แก้ปัญหาได้งานจะดำเนินการทันที
Rob

1
ฉันยังมีเส้นประ ... สิ่งที่ .... ทำไม? อย่างไรก็ตามขอขอบคุณ @Rob
Nikolay Dimitrov

8

อีกสิ่งหนึ่งที่ฉันสังเกตคือไฟล์/etc/cron.dนั้นไม่สามารถมีนามสกุลได้ ในกรณีเฉพาะของฉันฉันมีลิงก์สัญลักษณ์:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

ข้อ จำกัด ชื่อไฟล์มีการจัดทำเอกสารไว้ที่หน้า man-part: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.htmlเราสามารถส่งตัวเลือก --regex เพื่อแทนที่รูปแบบไฟล์ได้

พฤติกรรม cron เริ่มต้นยังคงอยู่โดยไม่มีส่วนขยายโปรดดูความคิดเห็นภายใต้: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022


ผู้ชายคุณช่วยชีวิตฉันไว้!
elboletaire

2
สิ่งนี้ถูกต้องบน Ubuntu (อาจเป็นใน Distros ที่ได้จาก Debian ทั้งหมด) บน Amazon Linux (และอาจเป็นใน distros ที่ได้จาก Redhat ทั้งหมด) คุณสามารถมีจุดในชื่อไฟล์ได้ ขอบคุณ Unix.SE
Law29

ฉันเพิ่งตรวจสอบเดเบียนบริสุทธิ์และจุดไม่ทำงานที่นั่นเช่นกัน เครื่องหมายขีดกลางใช้งานได้ (ต่างจากที่กล่าวไว้ข้างต้น)
Law29

4

ฉันคิดว่าคุณอาจขาดบรรทัดว่างที่จำเป็นจากจุดสิ้นสุดของไฟล์ cron ฉันมีปัญหาเดียวกัน แต่หลังจากตรวจสอบทุกอย่างที่ระบุไว้ที่นี่ (สิทธิ์ผู้ใช้ชื่อไฟล์รุ่น cron ฯลฯ ) ฉันรู้ว่าฉันไม่ได้มีการขึ้นบรรทัดใหม่หลังจากรายการสุดท้ายในฉัน/etc/cron.d/own_cronและทำให้ไฟล์ทั้งหมดถูกเพิกเฉย


2

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

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

หากคุณเปลี่ยนเป็นบัญชีผู้ใช้ปกติคุณจะต้องใช้sudo crontab -eเพื่อกำหนดค่าสคริปต์ที่คุณต้องการให้จัดตารางเพื่อให้ทำงานrootได้

crontab -lแสดงเฉพาะ crontab crontab -eปัจจุบันเมื่อคุณกำหนดขึ้นโดยใช้ หากคุณมีไฟล์ cron ใน/etc/cron.d/ ไฟล์นั้นจะไม่ปรากฏขึ้นcrontab -lขึ้น

chmod +x /backup.shนอกจากนี้คุณยังจะต้องตรวจสอบว่าสคริปต์ของคุณเป็นที่ปฏิบัติการด้วย:


1
ขอบคุณ - ในกรณีนี้ crontab มีการตั้งค่าในบริบทของการที่Dockerfileดังนั้นฉันไม่สามารถทำจริงๆcrontab -e- แต่มันเป็นข้อมูลที่เป็นประโยชน์อยู่แล้ว
Jivan

2

สำหรับ Cron จาก * bian distros (เช่น Raspbian) คุณต้องเปิดใช้งาน-lพารามิเตอร์ของ Cron daemon นั่นคือแนะนำให้ทำโดยใช้/etc/default/cronไฟล์ config, EXTRA_OPTSการเปิดใช้งาน


นี่เป็น downvote แต่ถูกต้องในบางกรณีแม้ว่าจะไม่ได้อธิบาย บนดิสทริบิวชัน distros ตาม-lตัวเลือกของ cron daemon อนุญาตให้ตั้งชื่อไฟล์เพิ่มเติมใน/etc/cron.dไดเรกทอรีดังนั้นหากไฟล์นั้นถูกละเว้นโดยไม่มีการโต้ตอบเนื่องจากมีจุดอยู่ในนั้นดังนั้น "add -l" หรือ "remove dot" จะแก้ไขปัญหา
Law29

1

ตรวจสอบรุ่นของcronคุณ

ดูเหมือนว่าถ้าคุณใช้ crond ของ Dillon คุณไม่ต้องการผู้ใช้ใน/etc/cron.dรายการ

ฉันคิดออกหลังจากดึงผมที่เหลืออยู่ออกไปเกือบหมด

ฉันมีรายการจำนวนหนึ่งที่ถูก/etc/cron.dติดตั้งโดยการติดตั้งต่างๆ หลังจากการสอบสวนฉันพบว่าหนึ่งในนั้นกำลังทำงานอยู่ ไม่มีผู้ใช้ ดังนั้นฉันจึงเอาผู้ใช้ออกจากคนอื่น และพวกเขาก็เริ่มทำงาน

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