MacOSX Lion中的cron日志文件在哪里?


25

我想对cron作业进行故障排除,直到最近修改为止,该工作都可以正常进行,但是我找不到cron日志文件,它在哪里?


2
这真的是一项Cron工作,还是您正在使用launchd。Cron已在OS X上弃用
。– jaberg 2012年

1
您是否为cron作业设置了日志文件?
daviesgeek 2012年

这实际上是cron我设置的工作cron -e,我可以看到它,cron -l并且我确信它在Lion和Snow Leopard上已经工作了很长时间。
阿里

而且不,我没有手动为“ cron”本身设置日志文件,尽管我在作业内部写入了日志文件,并且在更改某些内容后该文件最近已停止工作。
阿里

2
阿里,既然您有答案,请将其发布为答案并接受。不要将其编辑为问题。您不仅被允许,而且被鼓励回答您自己的问题。
杰森·萨拉兹

Answers:


30

默认情况下,cron不记录已执行作业的输出。可以记录cronjobs已经执行的事实,但这也不是OS X上的默认设置。

为了调查cronjob执行输出,建议您修改cronjob行以将STDOUT和STDERR重定向到日志文件。在您的crontab文件中或运行后crontab -e,无论如何,在工作行中添加如下内容:

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

这样做应该将STDOUT(通常是打印或回显的输出发送到STDOUT)发送到/ tmp目录中名为stdout.log的文本文件,而STDERR发送到temp目录中的stderr.log。许多实用程序使用STDERR将特殊错误消息打印出来,这些错误消息是应用程序错误,而不是程序实际执行所生成的错误。(您可以在Wikipedia上了解有关STDERR的更多信息。)


谢谢,这正是我一直在尝试cron的工作,由于某种原因,它似乎一开始就无法运行该作业。如果我自己通过在终端上键入命令来运行作业,则该命令将运行并输出到日志文件,但是如果我等待运行该命令,cron则什么也不会发生,至少日志文件没有任何变化,我在想也许是“ cron日志文件” “否则,consol中有任何痕迹可以帮助我了解发生了什么,最近我将shell从bash更改为zsh,但是我也不认为这可能会影响这一点。
阿里

1
根据erikslab.com/2011/02/04/logging-with-launchd,您可以/System/Library/LaunchDaemons/com.vix.cron.plist使用Stdout / Stderr路径修改cron plist()来调试cron本身。我不记得launchctl unloading和launchctl loading plist是否足够,或者因为它是系统守护程序,如果您必须完全重新启动。我建议后者只是为了确保。
杰森·萨拉兹

21

只需将以下内容添加到/etc/syslog.conf

cron.* /var/log/cron.log 

然后重启系统日志

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

经过测试并在OSX 10.7.4上工作


3
我喜欢这个主意-但在10.10.5中,我/etc/syslog.conf# Note that flat file logs are now configured in /etc/asl.conf。该文件具有不同的语法,我不清楚如何配置该文件中的日志记录。
肯·威廉斯

@KenWilliams即使说syslog.conf在High Sierra上仍然有效。
Fish Monitor

15

默认情况下,“日志记录”未启用。但是通过运行mail命令,您可能会获得一些有用的信息。

TL; DR on mailcommand:按Enter键以阅读消息,然后按Enter键q以退出。


4
非常好谢谢。矿山告诉我,我的Cron有一个无法识别的命令。干杯!
约书亚·品特

7

我能够找到cron-job登录,

/var/mail/{user-name}

以下是我获得的用于运行AWS CLI命令的cron作业日志,

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
这是存储在user
nohillside

@patrix,我也能够找到成功的cron工作。更新了答案。
Vineeth

真好!应该是公认的答案!
Trollhorn

3

事实证明,当cron正在运行工作时(和我一样),/usr/local/bin不在PATH
我通过反复试验发现了这一点,并从一个我知道会起作用的简单事情开始重新构建了工作,并逐渐添加了这些事情,直到发现问题为止。

关于其他建议和答案:
出于某种原因(至少在我的计算机上,该计算机运行的是从SnowLeopard升级的Lion)cron不使用launchd要读取的plist文件中指定的参数,/System/Library/LaunchDaemons/com.vix.cron.plist或者Lion上的cron可能不写入任何内容到stdout或stderr。

顺便说一句,我使用http://s3tools.org/s3cmdsync具有Amazon S3存储桶作为备份的文件夹(如原始的DropBox)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.