我想对cron作业进行故障排除,直到最近修改为止,该工作都可以正常进行,但是我找不到cron日志文件,它在哪里?
cron
我设置的工作cron -e
,我可以看到它,cron -l
并且我确信它在Lion和Snow Leopard上已经工作了很长时间。
我想对cron作业进行故障排除,直到最近修改为止,该工作都可以正常进行,但是我找不到cron日志文件,它在哪里?
cron
我设置的工作cron -e
,我可以看到它,cron -l
并且我确信它在Lion和Snow Leopard上已经工作了很长时间。
Answers:
默认情况下,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,但是我也不认为这可能会影响这一点。
/System/Library/LaunchDaemons/com.vix.cron.plist
使用Stdout / Stderr路径修改cron plist()来调试cron本身。我不记得launchctl unload
ing和launchctl load
ing plist是否足够,或者因为它是系统守护程序,如果您必须完全重新启动。我建议后者只是为了确保。
只需将以下内容添加到/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上工作
/etc/syslog.conf
说# Note that flat file logs are now configured in /etc/asl.conf
。该文件具有不同的语法,我不清楚如何配置该文件中的日志记录。
我能够找到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
user
事实证明,当cron正在运行工作时(和我一样),/usr/local/bin
不在PATH
。
我通过反复试验发现了这一点,并从一个我知道会起作用的简单事情开始重新构建了工作,并逐渐添加了这些事情,直到发现问题为止。
关于其他建议和答案:
出于某种原因(至少在我的计算机上,该计算机运行的是从SnowLeopard升级的Lion)cron
不使用launchd
要读取的plist文件中指定的参数,/System/Library/LaunchDaemons/com.vix.cron.plist
或者Lion上的cron可能不写入任何内容到stdout或stderr。
顺便说一句,我使用http://s3tools.org/s3cmd到sync
具有Amazon S3存储桶作为备份的文件夹(如原始的DropBox)。