Crontab không bao giờ chạy trong khi ở /etc/cron.d


32

Đây là những gì tôi đã làm trên Debian Jessie:

  • cài đặt cron qua apt-get install cron
  • đặt một backup_crontabtập tin vào/etc/cron.d/

Tuy nhiên, nhiệm vụ không bao giờ chạy.

Dưới đây là một số kết quả đầu ra:

/# 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

Có điều gì cần làm để kích hoạt một crontab cụ thể hoặc để tự kích hoạt "dịch vụ" cron không?


4
Điều gì xảy ra nếu nó chạy và không có lỗi mà bạn không thấy vì bạn đang chuyển hướng tất cả đầu ra sang / dev / null? :)
tink

@tink có thể nối đầu ra vào cuối tập tin không?
Jivan

2
chắc chắn là; 0,15,30,45 * * * * /backup.sh >> / tmp / tests_cron.out 2> & 1
tink

@Jivan, chỉ là một lưu ý nhỏ: ls /etc/cron.dtương đương với cd /etc/cron.d && lssản lượng. Sự khác biệt duy nhất là thư mục làm việc sẽ không thay đổi.
Drew Chapin

Câu trả lời:


49

Các tập tin /etc/cron.dcũng cần liệt kê người dùng rằng công việc sẽ được chạy theo.

I E

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

Bạn cũng nên đảm bảo quyền và chủ sở hữu: nhóm được đặt chính xác ( -rw-r--r--và được sở hữu bởi root:root)


16
crontab -lbáo cáo về các mục cron trong /var/spool/cron/crontabs/- tức là crontabs cho mỗi người dùng . /etc/cron.dtập tin là crontabs hệ thống và không được báo cáo bởi crontab -l.
Stephen Harris

5
Trên thực tế tôi đã đề cập rằng nó không hoạt động nhưng tôi chỉ nhận ra rằng đó là sau khi thêm rootvào tệp - chỉ crontab -lkhông đề cập đến nó, như bạn đã giải thích tại sao - cảm ơn vì sự giúp đỡ của bạn
Jivan

9
Dường như tên tệp cũng có vai trò. Trong trường hợp của tôi, tôi đã thêm vào etc/cron.dmột tệp có một dấu chấm ở giữa tên và công việc không bao giờ được thực hiện cho đến khi tôi đổi tên nó
pic

20
cùng một vấn đề ở đây, dấu gạch ngang "-" trong tên tệp, thay đổi chúng thành dấu gạch dưới "_" đã giải quyết vấn đề, công việc chạy ngay lập tức.
Rob

1
Tôi cũng đã có một dấu gạch ngang ... cái gì .... tại sao?! Dù sao, cảm ơn @Rob
Nikolay Dimitrov

8

Một điều khác tôi đã quan sát là các tập tin trong /etc/cron.dkhông thể có một phần mở rộng. Trong trường hợp cụ thể của tôi, tôi đã có một liên kết tượng trưng:

# 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

Hạn chế tên tệp được ghi lại tại trang man của phần chạy: http : // manpages.ubfox.com/manpages/xenial/man8/run-parts.8.html, người ta có thể vượt qua tùy chọn --regex để ghi đè định dạng tệp.

Tuy nhiên, hành vi cron mặc định vẫn không có tiện ích mở rộng, xem các bình luận trong: https://bugs.launchpad.net/ubfox/+source/debianutils/+orms/38022


Man, bạn đã cứu ngày của tôi!
elboletaire

2
Điều này đúng trên Ubuntu (có thể trên tất cả các bản phát hành có nguồn gốc từ Debian). Trên Amazon Linux (và có thể trên tất cả các bản phát hành có nguồn gốc Redhat), bạn có thể có một dấu chấm trong tên tệp. Cảm ơn Unix.SE.
Luật29

Tôi vừa kiểm tra một Debian thuần túy và các dấu chấm cũng không hoạt động ở đó. Dấu gạch ngang làm việc (không giống như những gì một nhận xét ở trên nói).
Luật29

4

Tôi nghĩ có lẽ bạn chỉ thiếu một dòng trống cần thiết từ cuối tệp cron của bạn. Tôi có cùng một vấn đề, nhưng sau khi kiểm tra mọi thứ được liệt kê ở đây (quyền người dùng, tên tệp, phiên bản cron, v.v.), tôi nhận ra rằng tôi không bị ngắt dòng sau lần nhập cuối cùng trong /etc/cron.d/own_cronđó và điều đó khiến toàn bộ tệp bị bỏ qua.


2

Nếu bạn là người dùng duy nhất trên máy tính này, bạn có thể chỉ muốn sử dụng crontab -e. Bạn sẽ được nhắc chọn một trình soạn thảo trong lần đầu tiên bạn chạy lệnh. Sau đó, bạn có thể thêm nó vào nó:

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

Nếu bạn thay đổi thành tài khoản người dùng bình thường, bạn sẽ cần sử dụng sudo crontab -eđể định cấu hình các tập lệnh bạn muốn lên lịch để chạy root.

crontab -lchỉ hiển thị crontab hiện tại, khi bạn thiết lập bằng cách sử dụng crontab -e. Nếu bạn có tệp cron trong /etc/cron.d/, nó sẽ không được hiển thị với crontab -l.

Bạn cũng sẽ cần xác minh rằng tập lệnh của bạn có thể thực thi được với : chmod +x /backup.sh.


1
cảm ơn - trong trường hợp này, crontab được đặt trong bối cảnh Dockerfilevì vậy tôi thực sự không thể làm được crontab -e- nhưng dù sao đó cũng là một thông tin hữu ích
Jivan

2

Đối với Cron từ * bian distros (như Raspbian), bạn cần bật -ltham số của trình nền Cron. Đó là khuyến khích để làm bằng cách sử dụng /etc/default/crontập tin cấu hình, cho phép EXTRA_OPTS.


Điều này đã được đánh giá thấp, nhưng nó là chính xác trong một số trường hợp, mặc dù không được giải thích. Trên các bản phân phối dựa trên Debian, -ltùy chọn cho cron daemon cho phép một tập hợp các tên tệp mở rộng trong /etc/cron.dthư mục, vì vậy nếu tệp bị âm thầm bỏ qua vì có một dấu chấm trong đó, thì "thêm -l" hoặc "xóa dấu chấm" sẽ khắc phục vấn đề.
Luật29

1

Kiểm tra phiên bản của bạn cron.

Có vẻ như nếu bạn đang sử dụng crond của Dillon, bạn không cần người dùng trong một /etc/cron.dmục.

Tôi phát hiện ra điều này sau khi nhổ hết tóc còn lại.

Tôi có một số ít các mục đã được đưa vào /etc/cron.dbởi các cài đặt khác nhau. Sau một số điều tra, tôi tìm thấy một trong số họ đang làm việc. Nó không có người dùng. Vì vậy, tôi đã đưa người dùng ra khỏi những người khác. Và họ bắt đầu làm việc.

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.