Voglio risolvere un cron job che ha funzionato bene fino a una modifica recente, ma non riesco a trovare il file di registro di cron, dov'è?
Per impostazione predefinita, cron non registra l'output dei lavori eseguiti. È possibile registrare il fatto che i cronjob sono stati eseguiti, ma non è quello predefinito su OS X.
Per indagare sull'esecuzione di cronjob, suggerisco di modificare la linea cronjob per reindirizzare STDOUT e STDERR ai file di log. Nel tuo file crontab o dopo aver eseguito crontab -e
, ma lo fai, aggiungi qualcosa di simile alla tua linea di lavoro:
0 0 * * * yourcommand >/tmp/stdout.log 2>/tmp/stderr.log
Questa operazione dovrebbe inviare STDOUT (output normalmente stampato o echo allo STDOUT) in un file di testo denominato stdout.log nella directory / tmp e STDERR a stderr.log nella directory temp. Molte utilità utilizzano STDERR per stampare messaggi di errore speciali quando si tratta di errori dell'applicazione e non di errori generati dall'esecuzione effettiva del programma. (Puoi leggere ulteriori informazioni su STDERR su Wikipedia.)
Molto più semplice aggiungere semplicemente quanto segue a /etc/syslog.conf
:
cron.* /var/log/cron.log
Quindi riavvia syslog
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
Testato e funzionante su OSX 10.7.4
Per impostazione predefinita, "logging" non è abilitato. Ma potresti ottenere alcune informazioni utili eseguendo il comando mail
.
TL; DR sul comando mail
: premi invio per leggere i messaggi, quindi q
e inserisci per uscire.
Risolto quando cron sta eseguendo il lavoro (come me), /usr/local/bin
non è in PATH
.
Ho trovato questo per tentativi ed errori e costruendo il lavoro da zero da una cosa semplice che sapevo avrebbe funzionato e gradualmente aggiunto le cose fino a quando ho trovato il problema.
Informazioni sugli altri suggerimenti e risposte:
Per qualche ragione (almeno sulla mia macchina, che esegue un Lion aggiornato da SnowLeopard) cron
non usa i parametri specificati nei file plist che launchd
viene soppiantato per leggere /System/Library/LaunchDaemons/com.vix.cron.plist
o forse cron su Lion no scrivi qualcosa su stdout o stderr.
Dal modo in cui sto usando il link a sync
una cartella con un bucket Amazon S3 come backup (come un DropBox primitivo) .
Sono stato in grado di trovare l'accesso cron-job,
/var/mail/{user-name}
Di seguito è riportato un registro del processo cron che ho per l'esecuzione di un comando CLI AWS,
From [email protected] Fri Mar 2 10:00:00 2018
Return-Path: <[email protected]>
X-Original-To: build
Delivered-To: [email protected]
Received: by BuildServer1.local (Postfix, from userid 501)
id A7A94296CBA3; Fri, 2 Mar 2018 10:00:00 +0100 (CET)
From: [email protected] (Cron Daemon)
To: [email protected]
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: <[email protected]>
Date: Fri, 2 Mar 2018 10:00:00 +0100 (CET)
upload: ../../app/logs/debug.log to s3://**my-s3***/app/logs/debug.log