Ошибка добавления cronjobs в Mac OS X Lion

37

До сих пор я никогда не пытался добавить crontask на моем Mac. К моему удивлению, выкинуло ошибку ..

[hayek@mac:/www/] 02:33:22 PM: crontab -e                                                                                                         1 .
crontab: no crontab for hayek - using an empty one
crontab: "/usr/bin/vi" exited with status 1

Как я могу понять, почему он выдает эту ошибку?

Я использую Mac OS X Lion 10.7.2

Хайек
источник
2
Вы используете cron по определенной причине? На OS x он был в значительной степени заменен launchd
Дэниел Бек
Я хотел использовать vnstat для отслеживания использования полосы пропускания, для чего требуется cronjob. Я знаю, что могу использовать альтернативное приложение, но было бы полезно узнать, как заставить cron работать на Mac, если это вообще возможно.
Хайек
1
Вы пытались crontab fileустановить таблицу из внешнего файла? Или использовать другой редактор, как EDITOR=NANO crontab -e?
Лри
@DanielBeck Я использую cron, потому что гораздо быстрее настроить новую запись, чем launchd.
Даг Харрис
Что crontab -lпоказывает? Есть ли другие сообщения в /var/log/cron.logили /var/log/system.log?
Даг Харрис

Ответы:

41

В ~ / .vimrc добавьте:

    autocmd тип файла crontab setlocal nobackup nowritebackup
user442586
источник
отличный простой трюк! хорошо работает для меня
Три Нгуен
Это лучший ответ и работает хорошо - намного проще, чем тот, который включает установку переменной env в профиле оболочки, а также редактирование~/.vimrc
RichVel
Отмечать это как правильный ответ, так как мой собственный ответ больше не является подходящим и не самым эффективным.
Хайек
1
Это работает и в Mac OS High Sierra! Спасибо за публикацию этого
Kearney Taaffe
44

Вопрос оказался viи никак не связан с cron. Делая export EDITOR=vimэто исправлено

Хайек
источник
2
Да, я понимаю, что вы нашли проблему, и решение ... что?
Гекхан Барыш Акер
3
Попробуйте сделать export EDITOR=vimто, что нужно.
Хайек
Спасибо @Hayek. Извините за задержку, я не смог ответить так же быстро, как вы: P. Однако запуск crontab со всемогущим sudo решил мою проблему.
Гекхан Барыш Акер
Рад, что ты получил это работает.
Хайек
1
У меня только что была такая же проблема. Установка EDITOR=vimне исправила это - это только привело меня к новой ошибке crontab: temp file must be edited in place. Я предпочитаю vim, однако я редактирую cronjobs так редко, что я достаточно счастлив, делая это NANO... хотя, если кто-то знает исправление, мне очень интересно.
Рикардо
35

По связанной проблеме, если вы получите сообщение:

crontab: temp file must be edited in place

Пытаться:

1) Добавить в .bash_profile

alias crontab="VIM_CRONTAB=true crontab"

2) Добавить в .vimrc

if $VIM_CRONTAB == "true"
    set nobackup
    set nowritebackup
endif

Источник: http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-place

xgMz
источник
2
Это правильный ответ!!
Джейкоб
Это сработало для меня, и я чувствую, что это должен быть правильный ответ.
Шубхамой
1
Для csh или tcsh используйтеalias crontab "export VIM_CRONTAB=true; /usr/bin/crontab"
JAFaucett
1
Я также думаю, что это лучший ответ, хотя вопрос от ОП не упоминает точную ошибку, описанную @xgMz. Похоже, что crontab не нравится режим резервного копирования vim при записи / сохранении, поэтому отключение его, как описано здесь, просто работает.
Шьям Хабаракада
У меня только что была эта проблема с vim и cron на macOS Sierra. Это правильный ответ!
Джеймс МакКормак
8

Ваш редактор системной переменной EDITOR - это vi, а vi не работает.

Пытаться:

export EDITOR=nano
Абдель Карим Матеос Санчес
источник
2

У меня была такая же проблема, и я последовал совету по созданию таблицы:

crontab file

И это создало таблицу cron, а затем я смог запустить

crontab -e

с vi в качестве редактора по умолчанию и проблем не было. Как будто vi не может сохранить файл, но после создания он может получить к нему доступ. Это согласуется с возможностью запуска:

sudo crontab -e 

Любопытно, что таблицы хранятся в

/usr/lib/cron/tabs/UserName

который может быть прочитан только как sudo.

user214155
источник
0

Лучший способ диагностировать это - создать новый crontab с простой записью, такой как:

* * * * * /bin/date >> /tmp/cron_output

Если это работает, то проблема связана с конкретной командой, которую вы добавили. Не могли бы вы поделиться с нами, а также поделиться результатами, когда вы выполняете его непосредственно из Terminal.app, а не из crontab?

tog22
источник
1
Та же ошибка с предложенной вами командой. В терминале /bin/dateвозвращается Wed Nov 23 15:03:49 PST 2011как положено.
Хайек
Хорошо, только что видел ваш ответ, который объясняет, почему вы получите ту же ошибку - просто подумал, что это может помочь диагностировать проблему :)
tog22
0

cron устарел в пользу launchd.

Lingon - отличный маленький инструмент для настройки запускаемых агентов; Раньше он был бесплатным, но теперь кажется, что он составляет 3 доллара.

В Википедии есть хорошая стартовая страница, описывающая все ключи и инструмент launchctl, который вы используете для их активации / деактивации.

chrish
источник
-1

Я видел эту же проблему на OSX. Ответ заключается в запуске от имени пользователя root с помощью команды sudo, например:

sudo crontab -e

Я получил эту идею от Гекхана Барыша Акера выше.

Натан Бич
источник
вместе с sudoвами вы собираетесь размещать задания cron под пользователем root. Файлы cron отличаются для вашего обычного пользователя и корневого.
Тимофей