Thường, crontab kịch bản không được thực hiện trên sắp xếp hay như mong đợi. Có rất nhiều lý do cho điều đó:
sai hủy đăng ký hiệu
quyền vấn đề
biến môi trường
Cộng đồng này wiki nhằm mục đích để tổng hợp lý do hàng đầu cho crontab kịch bản không được thực hiện như dự kiến. Viết mỗi lý do trong một câu trả lời riêng biệt.
Hãy đưa một trong những lý do cho mỗi câu trả lời - chi tiết về lý do tại sao nó không được thực thi và sửa chữa(es) cho rằng một lý do.
Xin vui lòng chỉ viết bài cụ thể vấn đề, ví dụ như lệnh xử như mong đợi từ vỏ nhưng thực hiện sai lầm bởi định kỳ.
Định kỳ chuyền một tập tối thiểu của môi trường biến của việc làm. Thấy sự khác biệt, thêm một giả công việc như thế này:
>* * * * * m /không/m.ra
Đợi /tmp/env.output để được tạo ra, sau đó bỏ công việc nữa. Bây giờ hãy so sánh các nội dung của /tmp/env.output với các sản phẩm của env chạy thường xuyên của thiết bị đầu cuối.
Một phổ biến "được rồi" đây là những PATH biến môi trường khác nhau. Có lẽ bạn định kỳ kịch bản, sử dụng sự chỉ huy somecommand tìm thấy trong /opt/someApp/bin mà bạn đã thêm vào PATH trong /etc/environment? định kỳ, bỏ qua PATH từ tập tin đó, vậy runnning somecommand từ kịch bản của bạn sẽ thất bại khi chạy với định kỳ, nhưng làm việc khi chạy trong một thiết bị đầu cuối. Nó đáng chú ý đó biến từ /etc/environment sẽ được thông qua ngày cho việc làm định kỳ, chỉ cần không phải là biến định kỳ đặc biệt bộ riêng của mình, như PATH.
Để làm được việc đó, chỉ cần thiết PATH biến ở đầu của kịch bản. Ví dụ.
#!/bin/bashPATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin# rest of script follows
Một số người thích, chỉ để sử dụng tuyệt đối đường dẫn đến tất cả các lệnh thay thế. Tôi đề nghị chống lại điều đó. Hãy xem những gì sẽ xảy ra nếu anh muốn chạy kịch bản khác nhau, hệ thống và trên đó hệ thống, lệnh là trong /opt/someAppv2.2/bin thay vào đó. Anh sẽ phải đi qua cả kịch bản thay thế /opt/someApp/bin với /opt/someAppv2.2/bin thay vì chỉ làm một sửa trên dòng đầu tiên của kịch bản.
Bạn cũng có thể thiết lập ĐƯỜNG biến trong hủy đăng ký tập tin, mà sẽ áp dụng cho tất cả định kỳ công việc. Ví dụ.
Hàng đầu của tôi ghi chú: Nếu bạn quên thêm một dòng mới vào cuối crontab tập tin. Nói cách khác, hủy đăng ký tập tin nên kết thúc với một dòng trống.
Dưới đây là các phần có liên quan trong những người đàn ông trang cho vấn đề này (man crontab sau đó bỏ qua tới kết thúc):
Although cron requires that each entry in a crontab end in a newline character, neither the crontab command nor the cron daemon will detect this error. Instead, the crontab will appear to load normally. However, the command will never run. The best choice is to ensure that your crontab has a blank line at the end. 4th Berkeley Distribution 29 December 1993 CRONTAB(1)
Lịch trình không hoạt động. Tôi thực sự làm hỏng này với một vài tháng trước đây.
Loại:
pgrep cron
Nếu bạn thấy không có số (tức là định kỳ chính của giám sát), sau đó định kỳ được không chạy. sudo /etc/init.d/cron start có thể được sử dụng để bắt đầu tiến trình tự động.
EDIT: Chứ không phải là cách gọi khởi kịch bản qua /etc sao.d, sử dụng serviceutility, ví dụ như:
sudo service cron start
EDIT: Cũng bạn có thể sử dụng systemctl trong Linux hiện đại, ví dụ như:
Kịch bản tên trong cron.d/, cron.daily/, cron.hourly/ etc. nên không có dấu chấm (.), nếu không chạy bộ phận sẽ bỏ qua chúng.
Xem chạy bộ phận(8):
If neither the --lsbsysinit option nor the --regex option is given then the names must consist entirely of upper and lower case letters, dig‐ its, underscores, and hyphens. If the --lsbsysinit option is given, then the names must not end in .dpkg-old or .dpkg-dist or .dpkg-new or .dpkg-tmp, and must belong to one or more of the following namespaces: the LANANA-assigned namespace (^[a-z0-9]+$); the LSB hierarchical and reserved namespaces (^_?([a-z0-9_.]+-)+[a-z0-9]+$); and the Debian cron script namespace (^[a-zA-Z0-9_-]+$).
Vì vậy, nếu bạn có định kỳ kịch bản backup.sh, analyze-logs.pl trong cron.daily/ mục, anh sẽ tốt nhất để loại bỏ các mở rộng tên.
Nếu bạn hủy đăng ký lệnh có một % biểu tượng trong đó, định kỳ cố gắng giải thích nó. Vì vậy, nếu bạn đang sử dụng bất kỳ lệnh với một % ở đó (như một dạng đặc điểm kỹ thuật ngày lệnh) bạn sẽ cần để thoát khỏi nó.
Nó cũng có thể là của người sử dụng mật khẩu đã hết hạn. Thậm chí gốc của mật khẩu có thể hết hạn. Bạn có thể tail -f /var/log/cron.log và bạn sẽ thấy định kỳ thất bại với khẩu hết hạn. Bạn có thể đặt mật khẩu để không bao giờ hết hạn bởi làm điều này: passwd -x -1 <username>
Trong một số hệ thống (Debian Chỉ) đăng nhập cho định kỳ được không kích hoạt mặc định. Trong /etc/rsyslog.tập tin hay /etc/rsyslog.d/50-mặc định.tập tin đường:
# cron.* /var/log/cron.log
nên được chỉnh sửa (sudo nano /etc/rsyslog.conf) không chú thích đến:
Trong một số hệ thống (Ubuntu) riêng đăng nhập tập tin cho định kỳ được không kích hoạt mặc định, nhưng định kỳ liên quan bản ghi được xuất hiện trong hệ thống tạo tập tin. Người ta có thể sử dụng
Bạn phải đóng hủy đăng ký -e cho định kỳ để có ảnh hưởng đến. Ví dụ sử dụng tên tôi sửa các tập tin và sử dụng w để viết nó, nhưng trong công việc là không thêm để định kỳ cho đến khi tôi bỏ cũng được. Vì vậy, tôi sẽ không thấy người làm việc cho đến khi tôi :q cũng.