Журнал действий cron на OS X

46

Крон, который идет с OS X, регистрирует свои действия где-нибудь?

Я не ищу вывод какой-либо конкретной работы cron, а скорее журнал того, что делает cron. На нескольких Linux-машинах, которые я проверил, есть такое /var/log/cronсодержимое:

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)

Это показывает, когда выполнялись задания, когда пользователи просматривали или редактировали crontabs и т. Д. Этот материал нигде не обнаружен на моей машине Snow Leopard.

Даг Харрис
источник

Ответы:

49

Гораздо проще просто добавить следующее в /etc/syslog.conf:

cron.*      /var/log/cron.log

Затем перезапустите системный журнал

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

Протестировано и работает на OSX 10.7.4

Фил
источник
Вау, намного проще. Имейте upvote. Интересно, сработало бы это на снежном барсе?
Даг Харрис
2
Работает на Маверикс
Clustermagnet
1
Работает над Yosemite
nickcoxdotme
Работает над Snow Leopard, 10.6.8 (да, я античный ...)
Даниэль Гриском
2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: операция запрещена, когда включена защита целостности системы (10.13.2 High Sierra). Нужно ли отключать SIP? Спасибо!
Шейн Лу
12

Я понял, как регистрировать свою активность в cron, не переключая каждую из них на запущенную работу.

В справочной странице cron упоминаются -xпараметры, которые позволяют «записывать информацию об отладке в стандартный вывод». Побочным эффектом этого является то, что они также записывают основную информацию в стандартную ошибку. Данные, отправленные со стандартной ошибкой, записываются в /var/log/system.log.

Это приводит к тому, что такие данные записываются в /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)

Поскольку сам cron запускается с помощью launchd, чтобы включить это, мне пришлось отредактировать его /System/Library/LaunchDaemons/com.vix.cron.plistтак, чтобы он теперь выглядел следующим образом:

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

Я использовал -x miscздесь, но это не имело значения, какие варианты я использовал. Добавление -xзапущенной регистрации активности работы. Я также добавил StandardErrorPath для записи /var/log/cron.logвместо значения по умолчанию /var/log/system.log.

А затем выгрузите и перезагрузите это:

$ sudo launchctl
Password:
launchd% unload /System/Library/LaunchDaemons/com.vix.cron.plist 
launchd% load /System/Library/LaunchDaemons/com.vix.cron.plist 
Даг Харрис
источник
1

В настоящее время OSX имеет тенденцию использовать launchd, а не cron - Apple dev doc - так что, возможно, в cron нечего регистрировать.

Используйте launchctl для управления уровнем регистрации launchd. Информация журнала сома появляется в system.log, но больше в консольном приложении -> Все сообщения

user151019
источник
5
Хммм, я бы мог подумать о переходе на launchd, но я старый сварливый юникс. Я перешел по этой ссылке. Пример на этой странице имеет длину 1046 байт, чтобы заменить 24 символа crontab 0 0 7 11 0 happybirthday.
Даг Харрис
-1

По крайней мере, в Yosemite cron записывает в журнал mailсообщения, поэтому используйте их mailдля чтения.

mcandre
источник
cronотправляет (в противном случае не перенаправленный) вывод владельцу задания по почте. Если весь вывод перенаправлен, почта не отправляется. (Даже если сообщение отправлено, я не уверен, показывает ли оно команду, которая была выполнена.) Вопрос в том, как администратор может видеть все команды, которые cronвыполнили. Чтобы использовать ваш ответ, человек должен был бы просмотреть почтовый файл каждого.
G-Man говорит: «Восстановите Монику»