công việc hàng ngày không chạy


19

Tôi đã tạo 3 công việc định kỳ hàng ngày để chạy.

Dưới đây là ba cái được đặt trong etc / cron.d 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

Tôi đã thay thế me@email.com ofcference bằng email của mình.

Nếu tôi chạy cronjob này bằng tay thì nó hoạt động tốt ./nameoffile.sh

Nhưng nó không chạy hàng ngày, điều gì có thể là nguyên nhân hoặc làm thế nào tôi có thể kiểm tra điều này?


2
Hãy chắc chắn rằng các tập tin mà bạn đã tạo trong cron.daily / hàng tuần / giờ / etc là thực thi chỉ cần làm một chmod + x /etc/cron.daily/whatever
Turgut Kalfaoglu

Câu trả lời:


6

Có hai nghi phạm có thể thường gây ra croncông việc không thể chạy.

Đầu tiên là vấn đề về quyền, đó là người dùng có thể chạy tập lệnh / lệnh nhưng trình nền cron không thể vì công việc nằm trong công việc cron của người dùng sai. Ví dụ: người dùng tạo tập lệnh hoặc chạy lệnh với các đặc quyền nâng cao tức là sử dụng sudo, sau đó thêm tập lệnh / lệnh đã kiểm tra vào danh sách các công việc cron ( crontab). Kết quả là công việc định kỳ của người dùng sẽ không thể chạy do nó cần các đặc quyền nâng cao.

  • Để đặt một công việc định kỳ trong loại crontab của người dùng hiện tại crontab -e
  • Để đặt một công việc định kỳ trong loại crontab của root sudo crontab -e

Lý do thứ hai là các đường dẫn, để chắc chắn rằng tập lệnh sẽ thực thi, người dùng phải thêm đường dẫn đầy đủ vào tập lệnh sẽ được thực thi trong crontab. Một giải pháp khác là mở rộng biến PATH của người dùng gốc bằng cách đặt dòng sau ở đầu tệp crontab của họ:

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

như wiki cộng đồng đề cập .

Bạn có thể muốn đọc wiki cộng đồng về cron vì nó cung cấp thêm chi tiết về những điều trên.


Vì vậy, tôi chỉ cần đặt tên tập tin trong đó?
sonicboom

Nó thực sự nói rằng không có công việc định kỳ trước cho root và bạn sẽ viết đầu tiên và sau đó nó yêu cầu bạn chọn một trình soạn thảo để sửa đổi crontab. Chỉ cần chọn một từ menu (1.bin / ed, v.v.). Chọn nano dễ dàng, chỉ cần chú ý đến các hướng dẫn.
Stef K

Vì vậy, để chạy một lần một ngày vào lúc 10 giờ tối, tôi sẽ đặt * 22 * ​​* * test> rkhunter.sh phải không?
sonicboom

tuyệt vời tôi sẽ thử ngay bây giờ
sonicboom

Bài kiểm tra> rkhunter.sh để làm gì?
sonicboom

75

Theo đó phản hồi , vấn đề nằm ở phần mở rộng .sh. Xóa cái đó (ví dụ đổi tên tập tin của bạn từ rkhunter.sh thành rkhunter.

Để xác nhận chạy lệnh sau run-parts --test /etc/cron.daily

Nếu tập lệnh của bạn (rkhunter) được bao gồm trong kết quả, tất cả đều tốt. Để biết thêm thông tin về lệnh phần chạy, hãy đọc các trang man trên đóman run-parts


1
Đây là câu trả lời tôi đang tìm kiếm, sau nhiều thử nghiệm khác nhau, tôi nhận ra rằng một tệp script khác không có phần mở rộng sh được thực thi
Albert Català

5
như @rharriso đã nói trong câu trả lời của mình. đó không phải là vấn đề với ".sh" như là một vấn đề với ".". bất kỳ tập tin với bất kỳ phần mở rộng sẽ được bỏ qua. để trích dẫn trực tiếp từ man run-parts"tên phải bao gồm toàn bộ chữ in hoa và chữ thường ASCII, chữ số ASCII, dấu gạch dưới ASCII và dấu trừ âm ASCII"
bắc-bradley

10

Tôi nghĩ rằng các tập tin với phần mở rộng được bỏ qua.

chạy:

 phần chạy --test /etc/cron.d Daily

Nếu bạn không thấy tập lệnh của mình được liệt kê, hãy xóa phần mở rộng .sh và thử lại.


10

Trong hệ thống của tôi, đó là vì anacron chưa được cài đặt.

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 )

Vì vậy, hoặc cài đặt anacron hoặc loại bỏ kiểm tra -x / usr / sbin / anacron


1
+1 Không phải là anacron được cài đặt theo mặc định? Tôi đã mong đợi điều đó. Tôi nghĩ rằng sẽ giải quyết nó cho tôi. Cảm ơn.
lepe

Chắc chắn, nó không có ở đó của tôi .. FFS, tôi chắc chắn rằng nó đã được, vì kịch bản đã được thực thi vài tháng trước!: dpkg --get-selections | grep cron.. <thề>
Grizly

Có, tôi không biết chuyện gì đã xảy ra vì đây là gói thường được cài đặt khi khởi động.
Natim

9
Điều này không thực sự chính xác. anacronkhông cần thiết; các ||nhà khai thác trong crontab lệnh thực thi run-partskhi anacron không được cài đặt. Khi anacronđược cài đặt, nó làm cho các lệnh hàng ngày / hàng tuần / hàng tháng run-partstrở nên dư thừa.
TalkLittle

Vì vậy, có thể đó là do các bộ phận chạy không hoạt động? Trong mọi trường hợp cài đặt anacron đã sửa nó cho tôi.
Natim

5

Thêm vào câu trả lời của Stef, bạn cũng nên đảm bảo rằng họ có bit thực thi:

$ 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

Bạn sẽ có thể chạy chúng bằng cách sử dụng chmod +x filename.


4

Đổi tên tệp của bạn để không có phần mở rộng .sh

Để xác minh đây là vấn đề, hãy thử

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

bạn sẽ thấy nó không được liệt kê. Vì vậy, chạy:

mv script.sh script

và thử liệt kê lại. Nó nên được liệt kê.


Vấn đề này dường như ảnh hưởng đến bất kỳ thực thi nào có phần mở rộng. Tôi đã có một tên tệp "filename.ca" và nó cũng sẽ không liệt kê nó cho đến khi tôi đổi tên thành "tên tệp"
kiwicomb123

0

Tôi không thể chạy nó với anacron, tôi đã gỡ bỏ anacron khỏi /etc/crontabvà thực thiapt remove --purge anacron và nó hoạt động ngay lập tức.

Tôi không hiểu tại sao chúng ta cần hai người lập lịch.

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.