ทำไมการวางสคริปต์ใน /etc/cron.hourly ไม่ทำงาน


16

ฉันใส่สคริปต์/etc/cron.hourlyที่เรียกใช้งานได้ แต่สคริปต์นั้นไม่ได้ทำงานทุกชั่วโมงจริงๆแล้วมันไม่ทำงานเลย

นี่คือสคริปต์ (เสียงชั่วโมง) ที่ฉันทำ:

#! / bin / ทุบตี
mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null &
spd-say -r -50 -p 50 -t male3 "เวลาขณะนี้คือ $ (วันที่ +"% l% p ")"
แจ้งเตือน - ส่ง "มัน:" "$ (วันที่ +"% l% p ") ทันที" -i ~ / รูปภาพ / "First tee.png" -t 5000

crontab ของฉันคือ

DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /home/naruto/Hour-sound.sh

ในขณะที่คำสั่งmplayerและspd-sayทำงานอย่างถูกต้องคำสั่งจะnotify-sendไม่ทำงาน ฉันยังลองเปลี่ยนเส้นทางข้อผิดพลาดไปยังไฟล์:

0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error

แต่นั่นไม่แสดงผลลัพธ์ ผมทำอะไรผิดหรือเปล่า?


แค่ทำให้แน่ใจว่าคุณทำให้สคริปต์ทำงานได้หรือไม่? เป็นเจ้าของโดย root หรือไม่ จะเกิดอะไรขึ้นเมื่อคุณรันสคริปต์จากเทอร์มินัลหรือวางสคริปต์ง่ายๆไว้ที่นั่น ไม่/etc/crontabมีrun-partsสายสำหรับการทำงานรายชั่วโมงcronงานจากไดเรกทอรี?
heemayl

ดำเนินการได้: ใช่การรันสคริปต์นั้นไม่มีอะไรผิดปกติจากไดเร็กตอรี่ /etc/cron.hourly ไม่รู้วิธีตรวจสอบสิ่งนี้หรือไม่มันอยู่ใน Startup Applications หรือไม่? @heemayl
บล็อกดำ

1
ที่ไม่/etc/crontabไฟล์มีเส้น17 * * * * root cd / && run-parts --report /etc/cron.hourly?
heemayl


1
กรุณาอย่าโพสต์ภาพหน้าจอของข้อความ โดยเฉพาะอย่างยิ่งเมื่อข้อความนั้นปรากฏในหน้าต่างเทอร์มินัลโปร่งใสและมีสีที่เบี่ยงเบนความสนใจ
terdon

คำตอบ:


24

ในขณะที่คุณอาจจะเคยเห็นในความคิดเห็นที่คำถามของคุณ cronjobs ใน/etc/cron.hourly(และอื่น ๆ ไดเรกทอรีที่คล้ายกัน) run-partsจะดำเนินการโดย run-partsค่อนข้างพิถีพิถันเกี่ยวกับชื่อไฟล์ โดยค่าเริ่มต้นจะไม่เรียกใช้ไฟล์ที่ชื่อไฟล์มีสิ่งอื่นนอกจาก (ทั้งหมดจาก ASCII)

  • ตัวอักษรตัวพิมพ์ใหญ่
  • อักษรตัวพิมพ์เล็ก
  • ตัวเลข
  • ขีด
  • เครื่องหมายขีดคั่น ("เครื่องหมายลบ")

ดังนั้นหากสคริปต์ของคุณมีชื่อไฟล์ตัวอย่างเช่น "myscript.sh" มันก็จะถูกละเว้นเพราะrun-partsไม่ชอบจุด


1- นี่คือไฟล์ของฉัน: mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- คุณลองใช้สคริปต์ใน /etc/cron.hourly และทำงานร่วมกับคุณหรือไม่?
บล็อกดำ

2
ฉันเพิ่งทดสอบสคริปต์ litte ที่เพิ่งเขียน "Hello" ไปยังไฟล์ใน / tmp และทำงานได้โดยไม่มีปัญหา ในกรณีที่คุณทราบว่าสคริปต์ใน/etc/cron.hourlyไม่จำเป็นต้องดำเนินการ "ในชั่วโมง"? หาก cronjob ของคุณ/etc/crontabมี 17 ตำแหน่งในนาทีสคริปต์จะถูกดำเนินการที่ 00:17, 01:17 เป็นต้น และอีกครั้งในกรณีที่สิทธิ์ของสคริปต์อนุญาตให้รูทผู้ใช้เรียกใช้งานได้
Henning Kockerbeck

พระยะโฮวา แต่สคริปต์ของฉันนั้นไม่เคยวิ่งตลอดเวลา และเกี่ยวกับการอนุญาตดูที่นี่: mediafire.com/view/psnb4bflawdlyly/…
บล็อกสีดำ

อาจเป็นปัญหาสิทธิ์จริง ฉันรู้ว่าสคริปต์ในทั่วไป/etc/cron.d/จะต้องไม่มีสิทธิ์ในการเขียนหรือดำเนินการสำหรับ "กลุ่ม" หรือ "อื่น ๆ " "เจ้าของ" ต้องการสิทธิ์ดำเนินการ "กลุ่ม" และ "อื่น ๆ " ต้องมีสิทธิ์อ่านเท่านั้น อาจใช้กับ/etc/cron.hourlyเช่นกัน แต่ฉันไม่ได้ทดสอบ
Henning Kockerbeck

ตกลงแล้วฉันได้เปลี่ยนการอนุญาตสำหรับไฟล์mediafire.com/view/s2lq63u7z54ohbo//ของฉันซึ่งทำให้กลุ่มที่เป็นกลุ่มรากอ่านได้อย่างเดียวและอื่น ๆ สิ่งนี้จะทำให้เกิดปัญหาหรือไม่
บล็อกสีดำ

5

ปัญหาหนึ่งคือคุณกำลังพยายามเรียกใช้โปรแกรมกราฟิก ( notify-send) จาก cron นั่นใช้เวลาปรับแต่งเล็กน้อย คุณต้องตั้งค่าXAUTHORITYและDISPLAYตัวแปรใน crontab เพื่อให้สามารถเชื่อมต่อกับเซสชัน X ที่กำลังทำงานอยู่และคุณต้องตั้งค่าXDG_RUNTIME_DIRเพื่อให้สามารถเชื่อมต่อกับเซสชัน pulseaudio ของคุณ น่าเสียดายที่จำเป็นต้องตั้งค่าเหล่านี้ใน crontab ดังนั้นคุณจึงไม่สามารถใช้งาน/etc/cron.hourlyได้ ให้เรียกใช้crontab -eและเพิ่มบรรทัดเหล่านี้แทน:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

เปลี่ยนค่า XDG_RUNTIME_DIRเป็นสิ่งที่ถูกส่งคืนเมื่อคุณechoจากเทอร์มินัล ในระบบของฉันนี่คือ:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

มันอาจจะเหมือนกันกับคุณ แต่ตรวจสอบก่อน ตอนนี้สคริปต์ของคุณจะทำงานทุกชั่วโมงและควรทำงานตามที่คาดไว้


นั่นคือสิ่งที่คุณหมายmediafire.com/view/ucjpvu8b41n3hue/... สิ่งนี้ไม่ได้ผลสำหรับฉัน
บล็อกดำ

ฉันคิดว่าถ้าปัญหาอยู่ในการแจ้งเตือน - ส่งแล้วทำไมคำสั่งอื่นไม่ทำงานด้วย (เช่น mplayer)
Black Block

@ BlackBlock มีปัญหาหลายประการ i) notify-sendต้องการXAUTHORITYและDISPLAYตัวแปรที่จะตั้งและ ii) mplayerจำเป็นต้องXDG_RUNTIME_DIRมีการตั้งค่า คุณลองคำแนะนำของฉัน? ที่ควรแก้ไขปัญหาทั้งสอง คุณอาจจะมีปัญหาการตั้งชื่อเพราะrun-partsอธิบายไว้ในคำตอบอื่น ๆ
terdon

ถ้าอย่างนั้นทำไมมันถึงไม่ได้ผลสำหรับฉัน ฉันจะบ้า! เห็นภาพของฉันในความคิดเห็นที่ 1 ในคำตอบของคุณ
Black Block

@ BlackBlock ไม่! คุณกำลังแก้ไขอยู่/etc/crontabอย่าทำอย่างนั้น คุณต้องการให้สิ่งนี้ทำงานเป็นผู้ใช้ของคุณไม่ใช่ในฐานะ root และไฟล์นั้นมีรูปแบบที่แตกต่างออกไป เพียงทำสิ่งที่ฉันพูดในคำตอบของฉันเรียกใช้crontab -eและเพิ่มบรรทัดที่นั่น
terdon

3

สคริปต์ที่ลงท้ายด้วย.shไม่ได้ถูกดำเนินการใน/etc/cron.hourlyโฟลเดอร์:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
ลิงก์หรือไบนารีภายในไดเรกทอรีที่จัดการโดย run-pars (เช่น /etc/cron.daily) จะไม่ทำงานหากช่วงเวลาเป็นส่วนหนึ่งของ ชื่อของพวกเขา.

เปลี่ยนชื่อสคริปต์

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

หรือวางการโทรแบบสคริปต์

/etc/crontab

ซึ่งช่วยให้.shตอนจบ


1

อย่าใช้สคริปต์ที่มีนามสกุล (abc.sh) และเพิ่มสถานที่ที่คุณต้องการ (cron.hours)

เพิ่มโค้ดของคุณลงในไฟล์ abc และบันทึก (สำหรับความต้องการของคุณ) (นี่ควรเป็นคำสั่ง bash)

ใช้

sudo chmod +x abc

คำสั่งเพื่อให้ไฟล์ที่ปฏิบัติการได้

edit etc/cronrtab file

มีไม่กี่บรรทัดที่กำหนดไว้ล่วงหน้าแก้ไขจากนาทีของคุณเป็นชั่วโมงและบันทึกบรรทัด

จากนั้นมันจะทำงานอย่างถูกต้อง

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