Tệp nhật ký cron ở đâu trong MacOSX Lion?


25

Tôi muốn khắc phục sự cố một công việc định kỳ hoạt động tốt cho đến khi sửa đổi gần đây, nhưng tôi không thể tìm thấy tệp nhật ký cron, nó ở đâu?


2
Đây có thực sự là một công việc định kỳ hay bạn đang sử dụng launchd. Cron đã bị từ
chối

1
Bạn đã thiết lập một tệp nhật ký cho công việc định kỳ?
daviesgeek

nó thực sự là một croncông việc tôi đã thiết lập nó cron -evà tôi có thể thấy nó cron -lvà tôi chắc chắn rằng nó đã làm việc với Lion và trước đó là với báo tuyết trong một thời gian dài.
Ali

và không, tôi không tự thiết lập một tệp nhật ký cho chính 'cron', mặc dù tôi viết vào một tệp nhật ký bên trong công việc và nó đã ngừng hoạt động gần đây sau khi tôi thay đổi điều gì đó.
Ali

2
Ali, vì bạn có câu trả lời, xin vui lòng gửi nó như một câu trả lời và chấp nhận nó. Đừng chỉnh sửa nó thành câu hỏi. Bạn không chỉ được phép, mà còn được khuyến khích, trả lời câu hỏi của riêng bạn.
Jason Salaz

Câu trả lời:


30

Theo mặc định, cron không đăng nhập đầu ra của các công việc được thực hiện. Có thể ghi lại sự thật rằng cronjobs đã được thực thi, nhưng đó cũng không phải là mặc định trên OS X.

Để điều tra đầu ra thực hiện cronjob, tôi khuyên bạn nên sửa đổi dòng cronjob của bạn để chuyển hướng STDOUT và STDERR sang logfiles. Trong tệp crontab của bạn hoặc sau khi chạy crontab -e, tuy nhiên bạn đi về nó, hãy thêm một cái gì đó như sau vào dòng công việc của bạn:

0 0 * * * yourcommand >/tmp/stdout.log 2>/tmp/stderr.log

Làm điều này sẽ gửi STDOUT (đầu ra thường được in hoặc echo'ed đến STDOUT) đến một tệp văn bản có tên stdout.log trong thư mục / tmp và STDERR tới stderr.log trong thư mục temp. Nhiều tiện ích sử dụng STDERR để in các thông báo lỗi đặc biệt khi chúng là lỗi ứng dụng và không phải là lỗi do thực thi thực tế của chương trình tạo ra. (Bạn có thể đọc thêm về STDERR trên Wikipedia.)


Cảm ơn, đó chính xác là những gì tôi đã cố gắng làm, có vẻ như cronvì lý do nào đó không thể điều hành công việc ngay từ đầu. Nếu tôi tự chạy công việc bằng cách gõ lệnh trong terminal thì nó sẽ chạy và xuất ra logfile nhưng nếu tôi đợi cronnó chạy thì không có gì xảy ra, ít nhất là không có thay đổi nào trong tệp nhật ký, tôi đã nghĩ có thể là "tệp nhật ký cron "Hoặc có bất kỳ dấu vết nào trong an ủi nó có thể giúp tôi tìm hiểu chuyện gì đang xảy ra, gần đây tôi đã thay đổi vỏ của mình từ bash sang zsh nhưng tôi không nghĩ rằng điều đó cũng có thể ảnh hưởng đến điều này.
Ali

1
Theo erikslab.com/2011/02/04/logging-with-launchd , bạn có thể sửa đổi cron plist ( /System/Library/LaunchDaemons/com.vix.cron.plist) bằng đường dẫn Stdout / Stderr để gỡ lỗi chính cron. Tôi không nhớ nếu launchctl unloading và launchctl loading plist là đủ, hoặc vì đó là một daemon hệ thống nếu bạn phải khởi động lại hoàn toàn. Tôi muốn đề nghị sau chỉ để chắc chắn.
Jason Salaz

21

Dễ dàng hơn nhiều chỉ đơn giản là thêm những điều sau đây vào /etc/syslog.conf:

cron.* /var/log/cron.log 

Sau đó khởi động lại syslog

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist 
sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist 

Đã thử nghiệm và làm việc trên OSX 10.7.4


3
Tôi thích ý tưởng này - nhưng trong 10.10.5, tôi /etc/syslog.confnói # Note that flat file logs are now configured in /etc/asl.conf. Tập tin đó có một cú pháp khác nhau, tôi không rõ cách cấu hình đăng nhập vào nó.
Ken Williams

@KenWilliams ngay cả khi nó nói rằng, syslog.conf vẫn hoạt động, trên High Sierra.
Giám sát cá

15

Theo mặc định, "đăng nhập" không được kích hoạt. Nhưng bạn có thể nhận được một số thông tin hữu ích bằng cách chạy maillệnh.

TL; DR trên maillệnh: nhấn enter để đọc tin nhắn, sau đó nhấn qenter để thoát.


4
Tốt lắm, cảm ơn nhé. Của tôi cho tôi thấy rằng có một lệnh không được nhận ra với Cron của tôi. Chúc mừng!
Joshua Pinter

7

Tôi đã có thể tìm thấy đăng nhập cron-job,

/var/mail/{user-name}

Sau đây là nhật ký công việc định kỳ mà tôi có để chạy lệnh AWS CLI,

From build@BuildServer1.local  Fri Mar  2 10:00:00 2018
Return-Path: <build@BuildServer1.local>
X-Original-To: build
Delivered-To: build@BuildServer1.local
Received: by BuildServer1.local (Postfix, from userid 501)
    id A7A94296CBA3; Fri,  2 Mar 2018 10:00:00 +0100 (CET)
From: build@BuildServer1.local (Cron Daemon)
To: build@BuildServer1.local
Subject: Cron <build@BuildServer1> /app/scripts/s3-sync.sh
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=build>
X-Cron-Env: <USER=build>
X-Cron-Env: <HOME=/Users/build>
Message-Id: <20180302090000.A7A94296CBA3@BuildServer1.local>
Date: Fri,  2 Mar 2018 10:00:00 +0100 (CET)

upload: ../../app/logs/debug.log to s3://**my-s3***/app/logs/debug.log

1
Đó là một thư lỗi được lưu trữ trong hộp thư củauser
nohillside

@patrix, tôi cũng có thể tìm được công việc thành công. Cập nhật câu trả lời.
Vineeth

Tốt đẹp! Nên là câu trả lời được chấp nhận!
Trollhorn

3

Hóa ra khi cron đang chạy công việc (như tôi), /usr/local/binkhông có trong PATH.
Tôi đã tìm thấy điều này bằng cách thử và sai và xây dựng công việc từ đầu từ những điều đơn giản mà tôi biết sẽ hoạt động và dần dần thêm vào cho đến khi tôi tìm thấy vấn đề.

Về các đề xuất và câu trả lời khác:
Vì một số lý do (ít nhất là trên máy của tôi đang chạy Lion được nâng cấp từ SnowLeopard) cronkhông sử dụng các tham số được chỉ định trong các tệp plist launchdđược đọc để đọc /System/Library/LaunchDaemons/com.vix.cron.plisthoặc có thể là cron trên Lion không viết gì cả để stdout hoặc stderr.

Nhân tiện, tôi đang sử dụng http://s3tools.org/s3cmd vào syncmột thư mục có nhóm Amazon S3 làm bản sao lưu (như DropBox nguyên thủy).

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.