最近の変更まで問題なく動作したcronジョブをトラブルシューティングしたいのですが、cronログファイルが見つかりません。どこにありますか?
cron
私が設定した仕事でcron -e
あり、私はそれを見ることができcron -l
、それはLionとその前にSnow leopardで長い間働いていたと確信しています。
最近の変更まで問題なく動作したcronジョブをトラブルシューティングしたいのですが、cronログファイルが見つかりません。どこにありますか?
cron
私が設定した仕事でcron -e
あり、私はそれを見ることができcron -l
、それはLionとその前にSnow leopardで長い間働いていたと確信しています。
回答:
デフォルトでは、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を使用して、プログラムの実際の実行によって生成されたエラーではなく、アプリケーションエラーの場合に特別なエラーメッセージを出力します。(STDERRの詳細については、Wikipediaをご覧ください。)
cron
です。何らかの理由でそもそもジョブを実行できないようです。ターミナルでコマンドを入力してジョブを自分で実行して実行し、ログファイルに出力しますが、cron
実行するのを待っても何も起こらず、少なくともログファイルに変更がない場合、「cronログファイル「または、コンソールに痕跡があったので、何が起こっているのかを知るのに役立ちました。最近、シェルをbashからzshに変更しましたが、これにも影響しなかったと思います。
/System/Library/LaunchDaemons/com.vix.cron.plist
)をStdout / Stderrパスで変更して、cron自体をデバッグできます。plistのlaunchctl unload
ingとlaunchctl load
ingで十分かどうか、または完全に再起動する必要がある場合はシステムデーモンであるため、思い出せません。念のため、後者をお勧めします。
以下を単に追加する方がはるかに簡単です/etc/syslog.conf
:
cron.* /var/log/cron.log
その後、syslogを再起動します
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
。このファイルの構文は異なりますが、ロギングの設定方法は明確ではありません。
デフォルトでは、「ロギング」は有効になっていません。ただし、mail
コマンドを実行することにより、いくつかの有用な情報を取得できます。
mail
コマンドのTL; DR :Enterキーを押してメッセージを読み、Enterキーを押しq
て終了します。
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
、plistファイルで指定されたパラメーターを使用せず、Lionのcronは何も書かないstdoutまたはstderrに。 launchd
/System/Library/LaunchDaemons/com.vix.cron.plist
ちなみに、http://s3tools.org/s3cmdを使用sync
して、Amazon S3バケットをバックアップとして使用しているフォルダー(プリミティブなDropBoxなど)を使用しています。