Tại sao đặt tập lệnh vào /etc/cron.hourly không hoạt động?


16

Tôi đặt một tập lệnh thực thi vào /etc/cron.hourly, nhưng tập lệnh đó không chạy mỗi giờ thực sự nó không bao giờ chạy.

Đây là kịch bản (Giờ âm thanh) mà tôi đã thực hiện:

#! / bin / bash
mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null &
spd-say -r -50 -p 50 -t male3 "Thời gian bây giờ là $ (ngày +"% l% p ")"
thông báo-gửi "Đó là:" "$ (ngày +"% l% p ") ngay bây giờ." -i ~ / Hình ảnh / "tee.png đầu tiên" -t 5000

Crontab của tôi là:

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

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

Trong khi các lệnh mplayerspd-sayđược chạy chính xác, notify-sendthì không. Tôi cũng đã thử chuyển hướng lỗi sang một tệp:

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

Nhưng điều đó cho thấy không có đầu ra. Tôi đang làm gì sai?


chỉ cần chắc chắn, bạn đã làm cho kịch bản thực thi? thuộc sở hữu gốc? Điều gì xảy ra khi bạn chạy tập lệnh từ thiết bị đầu cuối hoặc đặt một tập lệnh đơn giản ở đó? Liệu /etc/crontabrun-partsdòng để chạy theo giờ croncông việc từ thư mục?
heemayl

Có thể thực thi: có, việc chạy tập lệnh không có gì sai từ thư mục /etc/cron.hourly, không biết cách kiểm tra điều này? Có phải trong Ứng dụng Khởi động không? @heemayl
Khối đen

1
Liệu /etc/crontabtập tin có dòng 17 * * * * root cd / && run-parts --report /etc/cron.hourly?
heemayl


1
Xin vui lòng không đăng ảnh chụp màn hình của văn bản . Đặc biệt là khi văn bản đó được hiển thị trong một cửa sổ đầu cuối trong suốt và bao gồm các màu sắc gây mất tập trung.
terdon

Câu trả lời:


24

Như bạn có thể thấy trong các bình luận cho câu hỏi của bạn, các cronjobs trong /etc/cron.hourly(và các thư mục tương tự khác) được thực thi bởi run-parts. run-partslà một chút kén chọn về tên tập tin. Theo mặc định, nó không thực thi các tệp có tên tệp chứa bất kỳ thứ gì ngoài (tất cả các tệp từ ASCII)

  • chữ viết hoa
  • chữ viết thường
  • chữ số
  • dấu gạch dưới
  • dấu gạch ngang ("dấu trừ")

Vì vậy, nếu tập lệnh của bạn có tên tệp là "myscript.sh", thì tập lệnh sẽ bị bỏ qua, vì run-partskhông thích dấu chấm.


1- Đây là tập tin của tôi: mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- Bạn đã thử bất kỳ tập lệnh nào trong /etc/cron.hourly và làm việc với bạn chưa?
Khối đen

2
Tôi vừa thử một tập lệnh litte vừa viết "Xin chào" vào một tập tin trong / tmp, và nó đã hoạt động mà không gặp vấn đề gì. Chỉ trong trường hợp, bạn có biết rằng các tập lệnh trong /etc/cron.hourlykhông nhất thiết phải được thực thi "đúng giờ" không? Nếu cronjob của bạn /etc/crontabcó 17 ở vị trí phút, các tập lệnh được thực thi vào lúc 00:17, 01:17 và cứ thế. Và một lần nữa chỉ trong trường hợp, quyền của tập lệnh cho phép người dùng root thực thi chúng?
Henning Kockerbeck

Yah nhưng kịch bản đó của tôi không bao giờ chạy bất cứ lúc nào. và về sự cho phép xem tại đây: mediafire.com/view/psnb4bflawdlyly/ Kẻ
Khối đen

Có lẽ đó thực sự là một vấn đề cho phép. Tôi biết rằng các tập lệnh nói chung hơn /etc/cron.d/không được có quyền ghi hoặc thực thi quyền đối với "nhóm" hoặc "người khác". "chủ sở hữu" cần có sự cho phép thực thi, "nhóm" và "những người khác" chỉ phải có quyền đọc. Có lẽ điều đó /etc/cron.hourlycũng đúng, mặc dù tôi đã không kiểm tra điều đó.
Henning Kockerbeck

Được rồi, tôi đã thay đổi quyền cho tập tin mediafire.com/view/s2lq63u7z54ohbo/ của mình , điều đó làm cho nhóm là nhóm gốc chỉ đọc và những người khác, vậy điều này có gây ra vấn đề gì không?
Khối đen

5

Một vấn đề là bạn đang cố chạy một ứng dụng đồ họa ( notify-send) từ cron. Điều đó cần một chút điều chỉnh. Bạn cần đặt XAUTHORITYDISPLAYcác biến trong crontab để nó có thể kết nối với phiên X đang chạy của bạn và bạn cần đặt XDG_RUNTIME_DIRđể nó có thể kết nối với phiên pulseaudio của bạn. Thật không may, những thứ này cần được đặt trong chính crontab, vì vậy bạn không thể sử dụng /etc/cron.hourly. Thay vào đó, hãy chạy crontab -evà thêm các dòng sau:

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

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

Thay đổi giá trị của XDG_RUNTIME_DIRbất cứ thứ gì được trả về khi bạn echotừ một thiết bị đầu cuối. Trên hệ thống của tôi, đây là:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

Nó có thể sẽ giống nhau trên của bạn, nhưng kiểm tra trước. Bây giờ, tập lệnh của bạn sẽ chạy mỗi giờ và sẽ hoạt động như mong đợi.


Đó có phải là ý của bạn mediafire.com/view/ucjpvu8b41n3hue/ ,. điều này đã không làm việc cho tôi.
Khối đen

Tôi nghĩ rằng nếu vấn đề nằm ở thông báo-gửi thì tại sao lệnh khác không chạy tốt (như mplayer)?
Khối đen

@BlackBlock có nhiều vấn đề. i) notify-sendcần đặt XAUTHORITYDISPLAYcác biến được đặt và ii) mplayercần XDG_RUNTIME_DIRđặt. Bạn đã thử đề nghị của tôi? Điều đó sẽ khắc phục cả hai vấn đề. Bạn có thể cũng có vấn đề đặt tên vì run-partsnhư được giải thích trong câu trả lời khác.
terdon

Vậy thì tại sao điều này không làm việc cho tôi? Tôi sẽ điên lên! xem hình ảnh của tôi trong bình luận đầu tiên về câu trả lời của bạn
Black Block

@BlackBlock không! Bạn đang chỉnh sửa /etc/crontab, đừng làm điều đó. Bạn muốn nó được chạy như người dùng của bạn, không phải là root và tập tin đó có định dạng khác. Chỉ cần làm những gì tôi nói trong câu trả lời của tôi, chạy crontab -evà thêm các dòng ở đó.
terdon

3

Một tập lệnh kết thúc bằng .shkhông được thực thi trong /etc/cron.hourlythư mục:

https://bugs.debian.org/cgi-bin/orpreport.cgi?orms=308911
Liên kết hoặc nhị phân trong một thư mục được xử lý bởi run-Pars (như /etc/cron.daily) sẽ không chạy nếu một khoảng thời gian là một phần của tên của họ.

đổi tên kịch bản

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

hoặc đặt lệnh gọi vào

/etc/crontab

cho phép .shkết thúc


1

Không sử dụng tập lệnh có phần mở rộng (abc.sh) và thêm địa điểm bạn cần. (cron.hours).

thêm công cụ mã của bạn vào tập tin abc và lưu. (cho nhu cầu của bạn) (đây sẽ là lệnh bash)

sử dụng

sudo chmod +x abc

lệnh để thực hiện tập tin thực thi.

edit etc/cronrtab file

có một vài dòng được xác định trước.edit từ dòng phút của bạn đến giờ và lưu nó.

sau đó nó sẽ chạy đúng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.