Registro delle azioni cron su OS X


46

Il cron fornito con OS X registra le sue azioni ovunque?

Non sto cercando l'output di alcun lavoro cron specifico, ma piuttosto registro di ciò che cron sta facendo. Su un paio di macchine Linux che ho controllato, c'è /var/log/cronche ha contenuti come:

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)

Ciò mostra quando sono stati eseguiti i lavori, quando gli utenti hanno visualizzato o modificato i crontab, ecc. Questa roba non è stata trovata da nessuna parte sulla mia macchina Snow Leopard.

Risposte:


49

Molto più semplice aggiungere semplicemente quanto segue a /etc/syslog.conf:

cron.*      /var/log/cron.log

Quindi riavviare 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


Wow, molto più semplice. Avere un voto. Mi chiedo se questo avrebbe funzionato su Snow Leopard.
Doug Harris,

2
Opere su Mavericks
Clustermagnet

1
Funziona su Yosemite
nickcoxdotme il

Funziona su Snow Leopard, 10.6.8 (sì, sono un antico ...)
Daniel Griscom,

2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: operazione non consentita mentre è attiva la protezione dell'integrità del sistema (10.13.2 High Sierra). Devo disabilitare SIP? Grazie!
Shane Lu

12

Ho pensato a come registrare l'attività del mio cron job senza passare a quelli avviati.

La pagina man cron menziona le -xopzioni che consentono di "scrivere le informazioni di debug nell'output standard". Un effetto collaterale di ciò è che anche questi scrivono informazioni di base sull'errore standard. I dati inviati all'errore standard vengono scritti in /var/log/system.log.

Ciò si traduce in dati come questo scritti a /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)

Dal momento che cron stesso è stato lanciato da launchd, per abilitare questo, ho dovuto modificare in /System/Library/LaunchDaemons/com.vix.cron.plistmodo che ora assomigli a:

<?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>

Ho usato -x miscqui, ma non sembrava importare quali opzioni ho usato. Aggiunta della -xregistrazione avviata dell'attività di lavoro. Ho anche aggiunto StandardErrorPath a cui scrivere /var/log/cron.loginvece del valore predefinito /var/log/system.log.

E quindi scaricare e ricaricare questo:

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

1

OSX ora tende a utilizzare launchd piuttosto che cron - Apple dev doc - quindi potrebbe non esserci nulla in cron da registrare.

Utilizzare launchctl per controllare il livello di registrazione di launchd. Le informazioni del registro som vengono visualizzate in system.log ma altro nell'app console -> Tutti i messaggi


5
Hmmm, passare a launchd è qualcosa che potrei prendere in considerazione, ma sono un vecchio utente unix scontroso. Ho seguito quel link. L'esempio in quella pagina è lungo 1046 byte per sostituire 24 caratteri di crontab 0 0 7 11 0 happybirthday.
Doug Harris,

-1

Almeno su Yosemite, cron registra l'output come mailmessaggi, quindi usa il mailper leggerli.


croninvia l'output (altrimenti non reindirizzato) al proprietario del lavoro via mail. Se tutto l'output viene reindirizzato, non viene inviata alcuna posta. (Anche se viene inviato un messaggio, non sono sicuro che mostri il comando che è stato eseguito.) La domanda è: come può l'amministratore vedere tutti i comandi che cronha eseguito. Per usare la tua risposta, una persona dovrebbe guardare il file di posta di tutti.
G-Man dice "Reinstate Monica" il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.