Як перевірити, чи працює робота в Cron?


5

Я використовую crontab -eбез sudoредагування завдань cron і додаю туди наступний рядок -

20 22 23 10 * date "+%Y-%m-%d %H:%M:%S" >> ~/Documents/log.txt

потім я перевіряю файл журналу, і він не містить дати та часу.

Я намагався редагувати crontabяк root, але він також не оновлює файл. Що може бути тут не так? Чи є спосіб побачити журнал виконання завдань cron?

Кронтаб PS оновлення, створений під коренем:

0/5 * * * * /bin/date "+%Y-%m-%d %H:%M:%S" >> /tmp/log.txt
0/5 * * * * echo >> /tmp/log2.txt

log2.txt створено зараз.


crontab не розуміє ~ потрібно дати повний шлях
Марк

@Mark, я використовував повний шлях (замість ~) з кореневим crontab - результат той самий, запису у файлі немає.
LA_

Також шлях не може бути встановлений, використовуйте повний шлях до дати - також зауважте, що для запуску OSX вважають за краще кронувати
Марк

@ Марк, я намагаюся використовувати /bin/dateі echoзараз (див. Оновлене запитання).
LA_

Відповіді:


4

Ваше cronповідомлення про помилку відправляється на mailрахунок користувача, на якому виконується cronзавдання.

Введіть mailу командному рядку, щоб побачити повідомлення. Список mailкоманд дивіться у чоловічій пошті .

Вам слід отримувати пошту із повідомленням про помилку чимось:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Що стосується команди, і чому вона не працює, це тому, що знак "%" є символом "нового рядка", це означає, що він говорить оболонці "перейти до наступного рядка". Отже, після того, як він зустріне перший "%", він переходить до наступного рядка і ніколи не бачить решти команди. Це підтверджується "несподіваним EOF під час пошуку відповідності" "(подвійна цитата).

Сторінка локальної сторінки для crontab ( man crontab) є досить нечіткою з деталями, і я гадаю, що cronце не використовується для 1 . Однак, це пояснює це сторінка "crontab" від developer.apple.comlaunchd

Поле "шосте" (решта рядка) вказує команду, яку потрібно виконати. Вся командна частина рядка, до нового рядка або символу%, буде виконуватися в / bin / sh або оболонці, зазначеній у змінній SHELL cronfile. Знаки відсотків (%) в команді, якщо їх не вдалося виконати з косою рисою (\), будуть змінені в символи нового рядка, і всі дані після першого% будуть відправлені в команду як стандартне введення. Команда може бути додатково встановлена ​​префіксом " @AppleNotOnBattery", щоб сказати cron не виконувати команду, коли вона працює від батареї. Наприклад, "шосте" поле при використанні цієї опції виявиться чимось подібним"@AppleNotOnBattery /usr/bin/touch /tmp/foo"


Виправлення:

Отже, що вам потрібно зробити, це "уникнути" символу "%" зворотною косою рисою (\), щоб вона могла йому дослівно його інтерпретувати.

Вашою командою має бути:

0/5 * * * * /bin/date "+\%Y-\%m-\%d \%H:\%M:\%S" >> /tmp/log.txt

1 З man crontab: (Примітка Дарвіна: Хоча cron (8) і crontab (5) офіційно підтримуються в Дарвіні, їх функціональність була перетворена на запуск (8), що забезпечує більш гнучкий спосіб автоматичного виконання команд. Див. Startctl (1) для отримання додаткової інформації.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.