Скрипт Cron не виконується на Mavericks


11

Я налаштував файл crontab користувача таким чином:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Але це не буде виконано. Я чекала 10-15 хвилин. Чому?

Команда auto-update.sh працює легко, якщо виконується вручну. Як розірвати ланцюжок виконання і отримати скрипт від cron?


1
Яку операційну систему ви використовуєте? Cron застаріли на OS X, тому вам може знадобитися запустити демон?
bmike

Останній, 10.9.2. Як це зробити? Я просто хочу, щоб сценарій працював кожну годину, наприклад. У наведеному вище сценарії я був відчайдушний, тому що він не працював, і модифікував його для роботи кожні 2 хвилини.
RomaValcer

1
Демон cron повинен бути автоматично запущений (його заміною, launchd), якщо файл crontab існує. Див. /System/Library/LaunchDaemons/com.vix.cron.plist (особливо KeepAlive і QueueDirectories пунктів).
Gordon Davisson

Добре, Keeplive є, але тільки шлях, вказаний є '/ etc / crontab', що не існує. У QueueDirectories є існуючий файл у папці '/ usr / lib / cron / tabs'. Відкриваючи його су і вім, є моє завдання.
RomaValcer

Відповіді:


16

Середовище, в якому виконується завдання cron, досить мало відрізняється від інтерактивної оболонки; ймовірно, сценарій запущено, але не успішно. Однією з найбільших відмінностей є те, що для завдань cron за замовчуванням PATH просто "/ usr / bin: / bin", тому, якщо ви використовуєте будь-які команди, які не в / usr / bin або / bin, вони не будуть знайдено, якщо ваш сценарій не встановлює власну PATH, або не надає явних шляхів до команд. Інша велика різниця полягає в тому, що вона не підключена до інтерактивної сесії, тому якщо вона намагається зробити що-небудь інтерактивне (прочитати з терміналу тощо), це не вдасться. Спробуйте змінити запис cron на:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... і подивіться, чи з'являється щось інформативне в журналі.


Це краще, ніж мої зусилля - не соромтеся включати мою ідею реєстратора, якщо це зробить вашу відповідь кращою.
bmike

Журнал просто не з'явився.
RomaValcer

@RomaValcer: це дивно - це означає, що він навіть не доходить до запуску сценарію. Я біжу ps -ax | grep [c]ron і подивіться, чи вказується запущений демон cron (/ usr / sbin / cron). Якщо це так, спробуйте тест реєстратора bmike. У будь-якому випадку, перевірте журнали (/var/log/system.log та пункт "Усі повідомлення" у консольній утиліті) і перевірте, чи є щось релевантне.
Gordon Davisson

Так, це там. Але журнали не показують нічого, що починається в запланований час.
RomaValcer

4

Це важко сказати, але що, якщо ви додали другу роботу cron, щоб виконати кожні 5 хвилин або близько того, і він називає якийсь системний інструмент, який реєструє повідомлення в system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

Таким чином, ви будете знати, що cron працює для даного користувача і може зосередитися на запуску cron або на фіксації сценарію, щоб він працював у обмеженому середовищі cron. (Ви можете подивитися на годинник на стіні і вибрати кілька разів, які з'являться найближчим часом або навіть найближчі кілька хвилин - наприклад, редагування в 12:34 в 35,36,37,38 для хвилин для запуску і збереження файлу cron .)


4

Це було давно, коли ви задали це питання, але здається, що в цій темі не виникло жодного рішення.

Залежно від способу створення користувача-crontab, може бути необхідно виконати це після його редагування:

crontab ~/.yourcrontabfile

Щоб перевірити, чи активовано новий кронтаб (також після його зміни), перевірте з:

crontab -l

Це не працює. Crontab -l показує, що crons налаштовані, але він все ще не працює.
PKHunter

1

У мене була така ж проблема. Потрібно додати шлях до сценарію bash:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

У мене була така ж проблема. Він пішов після того, як я додав новий рядок після моєї роботи у моєму файлі crontab (я загальний crontab n00b, тому я не знаю, якщо така поведінка широко відома чи ні).

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