it-swarm-vi.com

Tại sao crontab của tôi không kích hoạt?

Tôi đã sử dụng crontab -e để thêm dòng sau vào crontab của tôi:

* * * * * echo hi >> /home/myusername/test

Tuy nhiên, tôi không thấy rằng tệp thử nghiệm được ghi vào. Đây có phải là một vấn đề cho phép, hoặc crontab không hoạt động chính xác?

Tôi thấy rằng quá trình cron đang chạy. Làm thế nào tôi có thể gỡ lỗi này?

Chỉnh sửa - Hỏi Ubuntu có một câu hỏi hay về crontab , thật không may, điều đó vẫn không giúp tôi.

Chỉnh sửa 2 - Hmm, có vẻ như tệp thử nghiệm của tôi có 214 dòng, có nghĩa là trong 214 phút cuối, nó đã được ghi vào mỗi phút. Tôi không chắc vấn đề là gì, nhưng rõ ràng nó đã biến mất.

29
ripper234

Có các triển khai của cron (không phải tất cả trong số chúng và tôi không nhớ đó là gì, nhưng tôi đã gặp một trong Linux) để kiểm tra các tệp crontab được cập nhật mỗi phút và không xem xét mục mới cho đến phút tiếp theo. Do đó, một crontab có thể mất tới hai phút để bắn lần đầu tiên. Đây có thể là những gì bạn quan sát.

28
gelraen

Tôi đã có cùng một vấn đề - một crontab đang hoạt động đột nhiên dừng lại sau khi tôi thêm một mục mới vào cuối. Hóa ra tôi đã quên đặt một dòng mới sau dòng cuối cùng đó.

Tôi phát hiện ra bằng cách ban hành lệnh

cat /var/log/syslog | grep crontab

và đầu ra cho thấy vấn đề:

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

Thêm dòng mới và tiết kiệm đã khắc phục vấn đề.

10
uniomni

Âm thanh như thế này là cố định. Lần tới, hãy thử đăng nhập STDERR. Sau đây sẽ chỉ đăng nhập vào STDOUT, không phải STDERR:

* * * * * echo hi >> /home/myusername/test

Cố gắng đảm bảo có một mệnh đề rõ ràng cho STDERR. Mặt khác, STDERR có thể được gửi qua email cho người dùng (giả sử rằng email đang hoạt động) hoặc có thể không đi đến đâu, tùy thuộc vào cách Cron được cấu hình.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

Sở thích của tôi là gửi đầu ra cronjob đến syslog. Bằng cách đó, tôi tận dụng mọi cơ sở hạ tầng nhật ký hệ thống hiện có (nhật ký hệ thống tập trung, Splunk, xoay vòng nhật ký đã được hỗ trợ, thật dễ dàng để so sánh các tin nhắn trong/var/log/message &/var/log/cronjob, v.v.), và tôi không spam các sysadmin (tôi) với các email không cần thiết.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
5
Stefan Lasiewski

Với tôi vấn đề là kịch bản không được thực thi. Tôi đã crontab -e thiết lập như thế này

* * * * * /bin/my-script.sh

Và tập tin myscript không được thực thi nên tôi đã chạy

chmod +x my-script.sh

Ngay lập tức tôi bắt đầu thấy đầu ra như mong đợi.

2
santiago arizti

Tôi đoán một lý do cho điều này có thể là thư mục/home/được mã hóa và khi người dùng đăng xuất thì cron không thể làm gì trong thư mục đó.

xem: https://stackoverflow.com/a/40354269/1279002

1
theINtoy

Dòng cron của bạn hoạt động tốt trên máy tính của tôi khi tôi thay đổi myusernae thành phunehehe. Có một số cách để tìm hiểu những gì sai với hệ thống của bạn.

Cron thường gửi thư cho người dùng khi có sự cố. Nếu bạn thấy thông báo "Bạn có thư", hãy sử dụng ứng dụng thư khách đến kiểm tra hộp thư đến của bạn . Hoặc, kiểm tra trong thư mục nhà của bạn, có thể có một tệp có tên dead.letter đó.

Bạn có thể kiểm tra /var/log/ cho các mục liên quan đến cron. Trên máy tính của tôi, tệp nhật ký là /var/log/cron/current (yêu cầu quyền truy cập root).

Nếu bạn có quyền truy cập root, bạn có thể dừng cron daemon và khởi động nó trong chế độ gỡ lỗi. Ví dụ: tôi sẽ sử dụng (thay đổi fcron thành tên của trình nền của bạn):

killall fcron
fcron --foreground --debug
1
phunehehe

Nhiều khả năng, khi cron thất bại, nó sẽ tạo một email đến id người dùng của công việc cron trên máy tính đó. Nếu bạn không có MTA hoạt động trên máy tính của mình hoặc bạn không đọc hoặc chuyển tiếp thư đó ở nơi khác, bạn sẽ không thấy tin nhắn đó, ngay cả khi MTA đang hoạt động.

Một cách hay để nhận lỗi của crontab qua thư là làm cho crontab của bạn trông như thế này:

MAILTO="[email protected]"
* * * * * echo hi >> /home/myusernae/test

Rõ ràng, sử dụng địa chỉ email của bạn chứ không phải [email protected] Điều này bảo cron gửi lỗi đến địa chỉ email của bạn chứ không phải tài khoản cục bộ. Đặc biệt, điều này rất hữu ích nếu bạn có một crontab gốc (hoặc đoạn crontab trong /etc/cron.d) mà bạn muốn gửi đầu ra cho bạn, bạn có thể tránh spam hộp thư gốc hoặc địa chỉ chuyển tiếp của root.

1
jsbillings