cron.daily งานไม่ทำงาน


19

ฉันสร้างงาน cron รายวัน 3 ครั้งเพื่อให้ทำงาน

ด้านล่างนี้คือสามตัวที่อยู่ใน etc / cron.daily

rkhunter.sh

#!/bin/sh
(
rkhunter --versioncheck
rkhunter --update
rkhunter --cronjob --report-warnings-only
) | mail -s 'rkhunter Daily Run (my server)' me@email.com

chkrootkit.sh

#!/bin/bash
chkrootkit | mail -s "chkrootkit Daily Run (my server)" me@email.com

logwatch.sh

#!/bin/sh
(
logwatch
) | mail -s 'logwatch Daily Log (my server)' me@email.com

ฉันแทนที่ mec@email.com ofcourse ด้วยอีเมลของฉัน

ถ้าฉันใช้ cronjob นี้ด้วยตนเองมันก็ใช้ได้ดี ./nameoffile.sh

แต่มันไม่ทำงานทุกวันสิ่งที่เป็นสาเหตุหรือฉันจะตรวจสอบสิ่งนี้ได้อย่างไร


2
ตรวจสอบให้แน่ใจว่าไฟล์ที่คุณสร้างใน cron.daily / รายสัปดาห์ / รายชั่วโมง / etc นั้นสามารถเรียกใช้งานได้เพียงทำ chmod + x /etc/cron.daily/whever
Turgut Kalfaoglu

คำตอบ:


6

มีผู้ต้องสงสัยสองคนที่อาจเกิดขึ้นซึ่งมักจะทำให้cronงานไม่สามารถทำงานได้

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

  • หากต้องการวางงาน cron ในประเภท crontab ของผู้ใช้ปัจจุบัน crontab -e
  • หากต้องการวางงาน cron ในประเภท crontab ของรูท sudo crontab -e

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

PATH=/usr/sbin:/usr/bin:/sbin:/bin

วิกิพีเดียเป็นชุมชนกล่าว

คุณอาจต้องการอ่านวิกิชุมชน เกี่ยวกับ cron เนื่องจากมีรายละเอียดเพิ่มเติมเกี่ยวกับข้างต้น


ดังนั้นฉันเพียงแค่ใส่ชื่อไฟล์ที่นั่น?
sonicboom

มันกำลังบอกว่าไม่มีงาน cron ก่อนหน้าสำหรับรูทและคุณจะเขียนก่อนแล้วจึงขอให้คุณเลือกเครื่องมือแก้ไขเพื่อปรับเปลี่ยน crontab เพียงเลือกหนึ่งรายการจากเมนู (1.bin / ed ฯลฯ ) เลือกนาโนง่าย ๆ เพียงใส่ใจคำแนะนำ
Stef K

เพื่อให้ทำงานวันละครั้งเวลา 22.00 น. ฉันจะใส่ * 22 * ​​* * ทดสอบ> rkhunter.sh ใช่ไหม?
sonicboom

อ่ายอดเยี่ยม! ไม่ลองตอนนี้!
sonicboom

การทดสอบ> rkhunter.sh มีไว้เพื่ออะไร?
sonicboom

75

ตามการตอบสนองนี้ปัญหาอยู่กับนามสกุล. sh ลบออก (เช่นเปลี่ยนชื่อไฟล์ของคุณจาก rkhunter.sh เป็น rkhunter

เพื่อยืนยันการรันคำสั่งต่อไปนี้ run-parts --test /etc/cron.daily

หากสคริปต์ของคุณ (rkhunter) รวมอยู่ในผลลัพธ์นั่นเป็นสิ่งที่ดี สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง run-parts อ่าน man man ที่อยู่บนมันman run-parts


1
นี่คือคำตอบที่ฉันกำลังมองหาหลังจากการทดสอบต่าง ๆ ฉันรู้ว่าไฟล์สคริปต์อื่นที่ไม่มีนามสกุล sh ถูกเรียกใช้
อัลเบิร์ตคาตาลัน

5
@rharriso พูดในคำตอบของเขา มันไม่ได้เป็นปัญหาอย่างมากสำหรับ ".sh" ว่าเป็นปัญหาของ "." ไฟล์ใด ๆ ที่มีส่วนขยายใด ๆ จะพลาด เพื่ออ้างโดยตรงจากman run-parts"ชื่อจะต้องประกอบด้วยตัวอักษรตัวพิมพ์ใหญ่และเล็ก ASCII ทั้งหมด, ตัวเลข ASCII, เครื่องหมายขีดเส้นใต้ ASCII และ ASCII ลบเครื่องหมายขีดคั่น"
Northern-bradley

10

ฉันคิดว่าไฟล์ที่มีนามสกุลถูกละเว้น

วิ่ง:

 run-parts --test /etc/cron.daily

หากคุณไม่เห็นสคริปต์ของคุณอยู่ในรายการให้ลบนามสกุล. sh และลองอีกครั้ง


10

ในระบบของฉันเป็นเพราะ anacron ไม่ได้ติดตั้ง

grep run-parts /etc/crontab

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

ดังนั้นจึงควรติดตั้ง anacron หรือลบการทดสอบ -x / usr / sbin / anacron


1
+1 ไม่ได้ติดตั้ง anacron ตามค่าเริ่มต้นหรือไม่ ฉันจะคาดหวังว่า ฉันคิดว่ามันจะแก้ปัญหาให้ฉัน ขอบคุณ
lepe

แน่นอนมันไม่ได้อยู่ที่นั่น .. FFS ฉันแน่ใจว่ามันเป็นสคริปต์ที่กำลังดำเนินการเมื่อไม่กี่เดือนที่ผ่านมา!: dpkg --get-selections | grep cron.. <swears>
Grizly

ใช่ฉันไม่ทราบว่าเกิดอะไรขึ้นอย่างใดอย่างหนึ่งเนื่องจากเป็นแพคเกจมักจะติดตั้งเมื่อเริ่มต้น
Natim

9
มันไม่ถูกต้องจริงๆ anacronไม่จำเป็น ตัว||ดำเนินการในคำสั่ง crontab จะทำงานrun-partsเมื่อไม่ได้ติดตั้ง anacron เมื่อanacronติดตั้งแล้วจะทำให้run-partsคำสั่งรายวัน / รายสัปดาห์ / รายเดือนเหล่านั้นซ้ำซ้อน
TalkLittle

ดังนั้นอาจเป็นเพราะส่วนรันไม่ทำงาน? ใน anycase การติดตั้ง anacron แก้ไขให้ฉัน
Natim

5

การเพิ่มคำตอบของ Stef คุณควรตรวจสอบให้แน่ใจว่าพวกเขามีบิตที่ใช้งานได้:

$ ls -l
-rwxr-xr-x  1 root root   268 Jun  1 08:06 00logwatch
-rwxr-xr-x  1 root root   311 May 22  2012 0anacron
-rwxr-xr-x  1 root root 15007 Jun  6 14:08 apt

chmod +x filenameคุณควรจะสามารถที่จะเรียกพวกเขาใช้


4

เปลี่ยนชื่อไฟล์ของคุณเพื่อไม่มีนามสกุล. sh

หากต้องการตรวจสอบปัญหานี้ให้ลอง

sudo run-parts --list /etc/cron.daily 

คุณจะเห็นว่าไม่ได้อยู่ในรายการ ดังนั้นเรียกใช้:

mv script.sh script

และลองรายการอีกครั้ง มันควรจะอยู่ในรายการ


ปัญหานี้ดูเหมือนว่าจะมีผลกระทบต่อการปฏิบัติการใด ๆ ที่มีนามสกุล ฉันมีชื่อไฟล์ "filename.ca" และมันจะไม่แสดงรายการจนกว่าฉันจะเปลี่ยนชื่อด้วยเช่นกัน "filename"
kiwicomb123

0

ฉันไม่สามารถเรียกใช้กับ anacron ได้ฉันลบ anacron ออก/etc/crontabและดำเนินการapt remove --purge anacronและทำงานได้ทันที

ฉันไม่เข้าใจว่าทำไมเราถึงต้องใช้ตัวกำหนดตารางเวลาสองตัว

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