Dziennik działań crona w systemie OS X

46

Czy cron dostarczany z OS X rejestruje swoje działania gdziekolwiek?

Nie szukam danych wyjściowych żadnego konkretnego zadania cron, ale raczej rejestruję, co robi cron. Na kilku maszynach z linuksem, które sprawdziłem, jest tam /var/log/crontaka zawartość, jak:

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)

Pokazuje to, kiedy uruchomiono zadania, kiedy użytkownicy przeglądali lub edytowali crontabs, itp. Tych rzeczy nigdzie nie znalazłem na mojej maszynie Snow Leopard.

Doug Harris
źródło

Odpowiedzi:

49

Znacznie łatwiej jest po prostu dodać następujące pliki do /etc/syslog.conf:

cron.*      /var/log/cron.log

Następnie uruchom ponownie syslog

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

Testowane i działające na OSX 10.7.4

phil
źródło
Wow, o wiele prostsze. Zyskaj głos. Zastanawiam się, czy to zadziałałoby na Snow Leopard.
Doug Harris
2
Działa na Mavericks
Clustermagnet
1
Działa na Yosemite
nickcoxdotme
Działa na systemie Snow Leopard, 10.6.8 (tak, jestem antykiem ...)
Daniel Griscom,
2
/System/Library/LaunchDaemons/com.apple.syslogd.plist: Operacja jest niedozwolona, ​​gdy włączona jest ochrona integralności systemu (10.13.2 High Sierra). Czy muszę wyłączyć SIP? Dzięki!
Shane Lu
12

Wymyśliłem, jak rejestrować moją aktywność zadania cron bez przełączania każdego z nich na zadania uruchomione.

Strona man cron wspomina o -xopcjach, które umożliwiają „zapisywanie informacji debugujących na standardowe wyjście”. Efektem ubocznym jest to, że zapisują one również podstawowe informacje do standardowego błędu. Dane wysyłane do standardowego błędu są zapisywane na /var/log/system.log.

Powoduje to, że dane takie jak te są zapisywane w /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)

Ponieważ sam cron jest uruchamiany przez launchd, aby to włączyć, musiałem edytować, /System/Library/LaunchDaemons/com.vix.cron.plistaby teraz wyglądał następująco:

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

Użyłem -x misctutaj, ale nie miało znaczenia, jakich opcji użyłem. Dodanie -xrozpoczętego rejestrowania aktywności zadania. Dodałem również StandardErrorPath do zapisu /var/log/cron.logzamiast domyślnego /var/log/system.log.

A następnie rozładuj i załaduj ponownie:

$ sudo launchctl
Password:
launchd% unload /System/Library/LaunchDaemons/com.vix.cron.plist 
launchd% load /System/Library/LaunchDaemons/com.vix.cron.plist 
Doug Harris
źródło
1

OSX ma teraz tendencję do używania uruchomionego zamiast cron - Apple dev doc - więc może być tak, że w cron nie ma nic do zarejestrowania.

Użyj launchctl, aby kontrolować poziom rejestrowania uruchomionego. Informacje o dzienniku Som pojawiają się w pliku system.log, ale więcej w aplikacji konsoli -> Wszystkie wiadomości

użytkownik151019
źródło
5
Hmmm, przejście na uruchomienie jest czymś, co mogę rozważyć, ale jestem złym, starym użytkownikiem unixa. Podążyłem za tym linkiem. Przykład na tej stronie ma długość 1046 bajtów, aby zastąpić 24 znaki crontab 0 0 7 11 0 happybirthday.
Doug Harris
-1

Przynajmniej w Yosemite, cron loguje dane wyjściowe jako mailwiadomości, więc użyj ich, mailaby je odczytać.

Mcandre
źródło
cronwysyła dane wyjściowe (w przeciwnym razie bez przekierowania) do właściciela zadania pocztą. Jeśli wszystkie dane wyjściowe zostaną przekierowane, poczta nie zostanie wysłana. (Nawet jeśli wiadomość zostanie wysłana, nie jestem pewien, czy pokazuje ona polecenie, które zostało wykonane.) Pytanie dotyczy tego, jak administrator może zobaczyć wszystkie wykonane polecenia cron. Aby skorzystać z Twojej odpowiedzi, osoba musiałaby przejrzeć plik poczty wszystkich osób.
G-Man mówi „Przywróć Monikę”