Log tindakan cron pada OS X

46

Apakah cron yang datang dengan OS X mencatat aksinya di mana saja?

Saya tidak mencari output dari pekerjaan cron tertentu, melainkan mencatat apa yang dilakukan cron. Pada beberapa mesin linux yang saya periksa, ada /var/log/cronyang memiliki konten seperti:

Apr 26 11:00:01 localhost crond[27755]: (root) CMD (/root/bin/mysql-backup)
Apr 26 11:01:01 localhost crond[27892]: (root) CMD (run-parts /etc/cron.hourly)
Apr 26 11:07:01 localhost crond[28138]: (root) CMD (/usr/local/bin/python /home/
user1/scripts/pythonscript.py)
Apr 26 11:18:18 localhost crontab[28921]: (user2) LIST (user2)
Apr 26 11:18:22 localhost crontab[28929]: (user2) BEGIN EDIT (user2)
Apr 26 11:18:59 localhost crontab[28929]: (user2) REPLACE (user2)

Ini menunjukkan ketika pekerjaan dijalankan, ketika pengguna melihat atau mengedit crontab, dll. Hal ini tidak ditemukan di mesin Snow Leopard saya.

Doug Harris
sumber

Jawaban:

49

Jauh lebih mudah dengan menambahkan berikut ini 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

phil
sumber
Wow, jauh lebih sederhana. Dapatkan upvote. Saya ingin tahu apakah ini akan berhasil pada Snow Leopard.
Doug Harris
2
Bekerja pada Mavericks
Clustermagnet
1
Bekerja pada Yosemite
nickcoxdotme
Bekerja di Snow Leopard, 10.6.8 (ya, saya barang antik ...)
Daniel Griscom
2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: Operasi tidak diizinkan saat Perlindungan Integritas Sistem digunakan (10.13.2 High Sierra). Apakah saya harus menonaktifkan SIP? Terima kasih!
Shane Lu
12

Saya menemukan cara untuk mencatat aktivitas pekerjaan cron saya tanpa mengubah masing-masing untuk memulai pekerjaan.

The man page cron menyebutkan -xopsi yang memungkinkan "menulis debugging informasi ke output standar." Efek samping dari ini adalah bahwa ini juga menulis informasi dasar untuk kesalahan standar. Data yang dikirim ke kesalahan standar ditulis /var/log/system.log.

Ini menghasilkan data seperti ini yang ditulis untuk /var/log/system.log:

debug flags enabled: misc
[42073] cron started
log_it: (user1 42084) CMD (/root/bin/mysql-backup)
log_it: (user1 42094) CMD (run-parts /etc/cron.hourly)

Karena cron sendiri diluncurkan oleh launchd, untuk mengaktifkan ini, saya harus mengedit /System/Library/LaunchDaemons/com.vix.cron.plistsehingga sekarang terlihat seperti:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.vix.cron</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/cron</string>
        <string>-x</string>
        <string>misc</string>
    </array>
    <key>KeepAlive</key>
    <dict>
        <key>PathState</key>
        <dict>
            <key>/etc/crontab</key>
            <true/>
        </dict>
    </dict>
    <key>QueueDirectories</key>
    <array>
        <string>/usr/lib/cron/tabs</string>
    </array>
    <key>EnableTransactions</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/var/log/cron.log</string>
</dict>
</plist>

Saya menggunakan di -x miscsini, tetapi tampaknya tidak masalah pilihan mana yang saya gunakan. Menambahkan -xmemulai logging aktivitas pekerjaan. Saya juga menambahkan StandardErrorPath untuk menulis /var/log/cron.logalih-alih default /var/log/system.log.

Lalu bongkar dan muat ulang ini:

$ sudo launchctl
Password:
launchd% unload /System/Library/LaunchDaemons/com.vix.cron.plist 
launchd% load /System/Library/LaunchDaemons/com.vix.cron.plist 
Doug Harris
sumber
1

OSX sekarang cenderung menggunakan launchd daripada cron - Apple dev doc - jadi mungkin tidak ada dalam cron untuk login.

Gunakan launchctl untuk mengontrol level logging dari launchd. Info log Som muncul di system.log tetapi lebih banyak di aplikasi konsol -> Semua pesan

pengguna151019
sumber
5
Hmmm, beralih ke launchd adalah sesuatu yang bisa saya pertimbangkan, tapi saya pengguna unix yang pemarah. Saya mengikuti tautan itu. Contoh pada halaman tersebut adalah panjang 1046 byte untuk menggantikan 24 karakter crontab 0 0 7 11 0 happybirthday.
Doug Harris
-1

Setidaknya pada Yosemite, cron log output sebagai mailpesan, jadi gunakan mailuntuk membacanya.

mcandre
sumber
cronmengirimkan (jika tidak dihapus) output ke pemilik pekerjaan melalui surat. Jika semua output dialihkan, tidak ada surat yang dikirim. (Bahkan jika pesan dikirim, saya tidak yakin apakah itu menunjukkan perintah yang dieksekusi.) Pertanyaannya adalah bagaimana administrator dapat melihat semua perintah yang crontelah dilakukan. Untuk menggunakan jawaban Anda, seseorang harus melihat file surat semua orang.
G-Man Mengatakan 'Reinstate Monica'