Di mana file log cron di MacOSX Lion?

25

Saya ingin memecahkan masalah pekerjaan cron yang berfungsi dengan baik sampai modifikasi baru-baru ini, tetapi saya tidak dapat menemukan file log cron, di mana itu?

Ali
sumber
2
Apakah ini benar-benar pekerjaan cron atau Anda menggunakan launchd. Cron telah ditinggalkan pada OS X.
jaberg
1
Apakah Anda mengatur file log untuk pekerjaan cron?
daviesgeek
itu sebenarnya cronpekerjaan yang saya atur cron -edan saya bisa melihatnya cron -ldan saya yakin itu berhasil pada Lion dan sebelum itu pada macan tutul salju untuk waktu yang lama.
Ali
dan tidak, saya tidak secara manual mengatur file log untuk 'cron' itu sendiri, meskipun saya menulis ke file log di dalam pekerjaan dan telah berhenti bekerja baru-baru ini setelah saya mengubah sesuatu.
Ali
2
Ali, Karena Anda punya jawabannya, silakan posting sebagai jawaban dan terima. Jangan mengeditnya menjadi pertanyaan. Anda tidak hanya diizinkan, tetapi didorong, untuk menjawab pertanyaan Anda sendiri.
Jason Salaz

Jawaban:

30

Secara default, cron tidak mencatat output dari pekerjaan yang dieksekusi. Dimungkinkan untuk mencatat fakta bahwa cronjobs telah dieksekusi, tetapi itu juga bukan default pada OS X.

Untuk menyelidiki output eksekusi cronjob, saya sarankan memodifikasi baris cronjob Anda untuk mengarahkan STDOUT dan STDERR ke filefile. Di file crontab Anda atau setelah berjalan crontab -e, bagaimanapun Anda melakukannya, tambahkan sesuatu seperti yang berikut ke baris pekerjaan Anda:

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

Melakukan ini harus mengirim STDOUT (biasanya dicetak atau di-echo output ke STDOUT) ke file teks bernama stdout.log di direktori / tmp, dan STDERR ke stderr.log di direktori temp. Banyak utilitas menggunakan STDERR untuk mencetak pesan kesalahan khusus ketika mereka kesalahan aplikasi, dan bukan kesalahan yang dihasilkan oleh eksekusi aktual program. (Anda dapat membaca lebih lanjut tentang STDERR di Wikipedia.)

Jason Salaz
sumber
Terima kasih, itulah tepatnya yang saya coba lakukan, sepertinya cronkarena suatu alasan gagal menjalankan pekerjaan. jika saya menjalankan pekerjaan sendiri dengan mengetikkan perintah di terminal itu berjalan dan output ke logfile tetapi jika saya menunggu untuk cronmenjalankannya tidak ada yang terjadi, setidaknya tidak ada perubahan dalam file log, saya berpikir mungkin "file log cron "atau ada jejak di konsol yang bisa membantu saya mengetahui apa yang sedang terjadi, baru-baru ini saya mengganti shell saya dari bash ke zsh tapi saya tidak berpikir itu bisa mempengaruhi ini juga.
Ali
1
Menurut erikslab.com/2011/02/04/logging-with-launchd , Anda dapat memodifikasi cron plist ( /System/Library/LaunchDaemons/com.vix.cron.plist) dengan jalur Stdout / Stderr untuk men-debug cron itu sendiri. Saya tidak ingat apakah launchctl unloading dan launchctl loading plist sudah mencukupi, atau karena daemon sistem jika Anda harus me-restart sepenuhnya. Saya menyarankan yang terakhir hanya untuk memastikan.
Jason Salaz
20

Jauh lebih mudah untuk menambahkan yang berikut ke /etc/syslog.conf:

cron.* /var/log/cron.log 

Kemudian restart syslog

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

Diuji dan bekerja pada OSX 10.7.4

Fraidoon Sarwary
sumber
3
Saya suka ide ini - tetapi pada 10.10.5, /etc/syslog.confkata saya # Note that flat file logs are now configured in /etc/asl.conf. File itu memiliki sintaks yang berbeda, tidak jelas bagi saya cara mengkonfigurasi login.
Ken Williams
@ KenWilliams bahkan jika mengatakan itu, syslog.conf masih berfungsi, di High Sierra.
Fish Monitor
14

Secara default, "logging" tidak diaktifkan. Tetapi Anda mungkin mendapatkan beberapa informasi berguna dengan menjalankan mailperintah.

TL; DR pada mailperintah: tekan enter untuk membaca pesan, lalu qmasuk dan untuk keluar.

William Entriken
sumber
4
Terima kasih banyak. Milik saya menunjukkan kepada saya bahwa ada perintah yang tidak dikenal dengan Cron saya. Tepuk tangan!
Joshua Pinter
6

Saya dapat menemukan cron-job log in,

/var/mail/{user-name}

Berikut ini adalah log pekerjaan cron yang saya dapatkan untuk menjalankan perintah AWS CLI,

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
Vineeth
sumber
1
Itu adalah pesan kesalahan yang disimpan di kotak suratuser
nohillside
@ Patrix, saya dapat menemukan pekerjaan cron sukses juga. Diperbarui jawabannya.
Vineeth
Bagus! Seharusnya jawaban yang diterima!
Trollhorn
3

Ternyata ketika cron menjalankan pekerjaan (seperti saya), /usr/local/bintidak ada dalam PATH.
Saya menemukan ini dengan coba-coba dan membangun pekerjaan dari awal dari hal-hal sederhana yang saya tahu akan berhasil dan secara bertahap menambahkan hal-hal sampai saya menemukan masalah.

Tentang saran dan jawaban lain:
Untuk beberapa alasan (setidaknya pada komputer saya, yang menjalankan Lion ditingkatkan dari SnowLeopard) crontidak menggunakan parameter yang ditentukan dalam file plist yang launchdditutup untuk membaca /System/Library/LaunchDaemons/com.vix.cron.plistatau mungkin cron on Lion tidak menulis apa pun ke stdout atau stderr.

Ngomong-ngomong, saya menggunakan http://s3tools.org/s3cmd ke syncfolder dengan bucket Amazon S3 sebagai cadangan (seperti DropBox primitif).

Ali
sumber