it-swarm-vi.tech

Làm thế nào để đăng nhập công việc cron?

Tôi muốn biết làm thế nào tôi có thể thấy chính xác những công việc định kỳ đang làm trên mỗi lần thực hiện. Các tệp nhật ký nằm ở đâu? Hoặc tôi có thể gửi đầu ra đến email của tôi? Tôi đã đặt địa chỉ email để gửi nhật ký khi công việc định kỳ chạy nhưng tôi chưa nhận được gì.

176
Adrian M.
* * * * * myjob.sh >> /var/log/myjob.log 2>&1

sẽ ghi nhật ký tất cả đầu ra từ công việc định kỳ vào /var/log/myjob.log

Bạn có thể sử dụng mail để gửi email. Hầu hết các hệ thống sẽ gửi đầu ra công việc cron chưa được xử lý qua email đến root hoặc người dùng tương ứng.

282
Spliffster

Theo mặc định, ghi nhật ký cron vào/var/log/syslog để bạn có thể xem các mục liên quan đến cron bằng cách sử dụng:

grep CRON /var/log/syslog

https://askubfox.com/questions/56683/where-is-the-cron-crontab-log

52
Matthew Lock

Có ít nhất ba loại ghi nhật ký khác nhau:

  1. Việc ghi nhật ký TRƯỚC KHI chương trình được thực thi, chỉ ghi nhật ký NẾU. Cronjob TRIED để thực thi lệnh. Cái đó được đặt trong/var/log/syslog, như đã được đề cập bởi @Matthew Lock.

  2. Việc ghi nhật ký lỗi SAU chương trình đã cố thực thi, có thể được gửi tớian email hoặc tệp, như được đề cập bởi @Spliffster. Tôi thích đăng nhập vào một tệp, vì với email THÌ bạn có một nguồn MỚI Các vấn đề và kiểm tra xem việc gửi và nhận email có hoạt động hay không Đôi khi, đôi khi không. Ví dụ: trong một Máy tính để bàn phổ biến đơn giản mà bạn không quan tâm Cấu hình một smtp, đôi khi bạn sẽ thích đăng nhập vào một tệp:

     * * * *  COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
    
    • Tôi cũng sẽ xem xét việc kiểm tra các quyền của/ABSOLUTE_PATH_TO_LOG và chạy lệnh từ quyền của người dùng đó. Chỉ để xác minh, trong khi bạn kiểm tra xem nó có thể là nguồn gây ra sự cố không.
  3. Việc ghi nhật ký chương trình, với việc xử lý lỗi và ghi nhật ký riêng cho mục đích theo dõi.

Có một số nguồn phổ biến của sự cố với cronjobs: * ĐƯỜNG TUYỆT ĐỐI của nhị phân sẽ được thực thi. Khi bạn chạy nó từ .__ của bạn. Shell, nó có thể hoạt động, nhưng quá trình cron dường như sử dụng một .__ khác. môi trường và do đó không phải lúc nào cũng tìm thấy nhị phân nếu bạn không sử dụng đường dẫn tuyệt đối . * LIBRARIES được sử dụng bởi nhị phân. Nó ít nhiều giống với điểm trước đó, nhưng hãy chắc chắn rằng, nếu chỉ cần đặt TÊN lệnh, đang đề cập chính xác đến nhị phân sử dụng cùng một thư viện, hoặc tốt hơn, hãy kiểm tra xem nhị phân bạn đang tham chiếu với đường dẫn tuyệt đối giống như bạn giới thiệu khi bạn sử dụng bàn điều khiển trực tiếp. Các nhị phân có thể được tìm thấy bằng cách sử dụng lệnh định vị, ví dụ:

$locate python

Hãy chắc chắn rằng nhị phân bạn sẽ giới thiệu, giống hệt như nhị phân bạn đang gọi trong Shell của bạn, hoặc chỉ cần kiểm tra lại trong Shell của bạn bằng cách sử dụng đường dẫn tuyệt đối mà bạn dự định đặt vào cronjob.

  • Một nguồn phổ biến khác của vấn đề là cú pháp trong cronjob. Hãy nhớ rằng có những ký tự đặc biệt bạn có thể sử dụng cho danh sách (dấu phẩy), để xác định phạm vi (dấu gạch ngang -), để xác định gia tăng của phạm vi (dấu gạch chéo), v.v. Hãy xem: http: //www.softpanorama .org/Tiện ích/cron.shtml
9
David L

Đây là mã của tôi:

* * * * * your_script_fullpath >> your_log_path 2>&1
9
Haimei

Trên Ubuntu, bạn có thể kích hoạt tệp cron.log để chỉ chứa các mục CRON.

Bỏ ghi chú dòng đề cập đến cron trong tệp /etc/rsyslog.d/50-default.conf:

#  Default rules for rsyslog.
#

#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                          /var/log/cron.log

Lưu và đóng tệp rồi khởi động lại dịch vụ rsyslog:

Sudo systemctl restart rsyslog

Bây giờ bạn có thể thấy các mục nhật ký cron trong tệp riêng của mình:

Sudo tail -f /var/log/cron.log

Đầu ra mẫu:

Jul 18 07:05:01 machine-Host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

Tuy nhiên, bạn sẽ không thấy thêm thông tin về những tập lệnh nào thực sự được chạy bên trong /etc/cron.daily hoặc /etc/cron.hourly, trừ khi các tập lệnh đó trực tiếp xuất ra cron.log (hoặc có thể cho một số tệp nhật ký khác).

Nếu bạn muốn xác minh xem một crontab đang chạy và không phải tìm kiếm nó trong cron.log hoặc syslog, hãy tạo một crontab chuyển hướng đầu ra thành tệp nhật ký bạn chọn - đại loại như:

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1

Các bước được thực hiện từ: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ub Ubuntu-linux/

4
Gianfranco P.

Trong trường hợp bạn đang chạy một số lệnh với Sudo, nó sẽ không cho phép nó. Sudo cần một tty.

1
Saad Masood

cron đã gửi đầu ra tiêu chuẩn và lỗi tiêu chuẩn của mọi công việc mà nó chạy qua thư cho chủ sở hữu của công việc định kỳ.

Bạn có thể sử dụng MAILTO=recipient trong tệp crontab để gửi email đến một tài khoản khác.

Để làm việc này, bạn cần phải có thư hoạt động đúng. Việc gửi đến hộp thư cục bộ thường không phải là vấn đề (thực tế, rất có thể ls -l "$MAIL" sẽ tiết lộ rằng bạn đã nhận được một số) nhưng việc lấy nó ra khỏi hộp và ra internet đòi hỏi MTA (Postfix, Sendmail, bạn có gì) được cấu hình đúng để kết nối với thế giới.

1
tripleee

Nếu bạn vẫn muốn kiểm tra công việc định kỳ của mình, bạn nên cung cấp .__ hợp lệ. tài khoản email khi thiết lập các công việc Cron trong cPanel.

Khi bạn chỉ định một email hợp lệ, bạn sẽ nhận được đầu ra của công việc định kỳ được thực thi. Do đó, bạn sẽ có thể kiểm tra nó và đảm bảo mọi thứ đã được thực hiện chính xác. Lưu ý rằng bạn sẽ không nhận được email nếu không có đầu ra từ lệnh cron job.

Xin lưu ý rằng bạn sẽ nhận được email cho mỗi công việc định kỳ đã thực hiện. Điều này có thể làm ngập hộp thư đến của bạn trong trường hợp con chuột của bạn chạy quá thường xuyên

0
Faridul Khan