Подтвердить что ты не робот

Почему у меня нет входа crontab на OS X при использовании vim?

Я хотел бы использовать cron на моем Mac. Я выбираю его над launchd, потому что я хочу иметь возможность использовать свои новые знания и в Linux. Однако я не могу заставить команду crontab -e работать. Он запускает vim, я вхожу в тестовое задание:

0-59 * * * * mollerhoj3 echo "Hello World"

Но после сохранения и завершения работы (:wq),

crontab -l

говорит:

No crontab for mollerhoj3

Что я делаю неправильно?

4b9b3361

Ответ 1

Выполните следующие действия:

  • В терминале: crontab -e.
  • Нажмите i, чтобы перейти в режим вставки vim.
  • Введите ваше задание cron, например:

    30 * * * * /usr/bin/curl --silent --compressed http://example.com/crawlink.php
    
  • Нажмите Esc, чтобы выйти из режима вставки vim.

  • Введите ZZ для выхода из vim (должны быть заглавные буквы).
  • Вы должны увидеть следующее сообщение: crontab: installing new crontab. Вы можете проверить файл crontab с помощью crontab -l.

Обратите внимание, что это может не работать в зависимости от содержимого вашего файла ~/.vimrc.

Ответ 2

У меня никогда не было этой проблемы, но я создаю файл ~/.crontab и редактирую его (что позволяет мне создать резервную копию, Time Machine или иначе), затем запустите

crontab ~/.crontab

Работал для меня в течение 20 лет через множество разновидностей unix.

Ответ 3

ПРИМЕЧАНИЕ: ответ, который говорит, что используется команда ZZ, не работает для меня в моей системе Mavericks, но это, вероятно, связано с чем-то в моей конфигурации vim, потому что, если я начну с нетронутый .vimrc, принятый ответ работает. Мой ответ может работать на вас, если другое решение не будет.

В MacOS X, согласно справочной странице crontab, временный файл crontab, созданный с помощью crontab -e, должен быть отредактирован на месте. Vim не редактирует по умолчанию по умолчанию (но для поддержки crontab -e может потребоваться специальный случай), поэтому, если ваша переменная среды $EDITOR установлена ​​на vi (по умолчанию) или vim, редактирование crontab всегда будет терпеть неудачу.

Чтобы заставить Vim редактировать файл на месте, вам нужно сделать:

:setlocal nowritebackup

Это позволит вам обновить crontab, когда вы выполняете crontab -e с помощью команд :wq или ZZ.

Вы можете добавить автокоманду в свой .vimrc, чтобы она автоматически работала при редактировании crontabs:

autocmd FileType crontab setlocal nowritebackup

Другой способ - добавить setlocal nowritebackup в ~/.vim/after/ftplugin/crontab.vim, который будет автоматически загружен Vim, когда вы будете редактировать файл crontab, если у вас включен плагин Filetype. Вы также можете проверить ОС, если вы используете ваши файлы vim на нескольких платформах:

""In ~/.vim/after/ftplugin/crontab.vim
if has("mac")
  setlocal nowritebackup
endif

Ответ 4

Использование cron на OS X не рекомендуется. Вместо этого используется launchd. Попробуйте man launchctl, чтобы начать. Вы должны создать специальные XML файлы, которые определяют ваши задания и помещают их в особое место с определенными правами.

Обычно вам просто нужно выяснить launchctl load

http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/launchctl.1.html

http://nb.nathanamy.org/2012/07/schedule-jobs-using-launchd/

Edit

Если вы действительно хотите использовать cron на OS X, посмотрите этот ответ: https://superuser.com/a/243944/2449

Ответ 5

Я сделал 2 вещи, чтобы решить эту проблему.

  • Я коснулся файла crontab, описанного в этой ссылке coderwall.com/p/ry9jwg (Спасибо @Andy).
  • Используемый Emacs вместо моего vim по умолчанию: EDITOR = emacs crontab -e (я понятия не имею, почему vim не работает)

crontab -l теперь печатает cronjobs. Теперь мне нужно только выяснить, почему cronjob все еще не работает;-)

Ответ 6

Разница между cron и launchd

Как уже упоминалось, cron устарел (но поддерживается), а launchd рекомендуется для OS X.

Это взято из developer.apple.com

Влияние спящего режима и выключение питания

Если система выключена или спит, задания cron не выполняются; они не будут работать до следующего назначенного времени.

Если вы планируете запуск задания, установив ключ StartCalendarInterval, и компьютер спит, когда задание должно быть запущено, ваше задание будет выполняться при просыпании компьютера. Однако, если машина выключена, когда задание должно выполняться, задание не выполняется до следующего назначенного времени.

Все остальные задания запуска пропускаются, когда компьютер выключен или спит; они не будут работать до следующего назначенного времени.

Следовательно, если компьютер всегда выключен в запланированное время, оба задания cron и задания запуска никогда не запускаются. Например, если вы всегда выключите свой компьютер ночью, задание должно выполняться в течение 1 A.M. никогда не будет запущен.

Ответ 7

В пользовательском crontab (crontab -e) не помещайте поле пользователя.

Правильный cron:

0-59 * * * * echo "Hello World"

Синтаксис с полем пользователя предназначен только для /etc/crontab:

0-59 * * * * mollerhoj3 echo "Hello World"

Ответ 8

Ошибка crontab: temp file must be edited in place связана с тем, как vim обрабатывает файлы резервных копий.

Чтобы использовать vim с cron, добавьте следующие строки в свой .bash_profile
export EDITOR=vim
alias crontab="VIM_CRONTAB=true crontab"

Исходный файл:
source .bash_profile

А затем в вашем .vimrc добавьте:
if $VIM_CRONTAB == "true" set nobackup set nowritebackup endif

Это отключит резервное копирование при использовании vim с cron. И вы сможете использовать crontab -e для добавления/редактирования cronjobs.

После успешного сохранения вашего cronjob вы увидите сообщение:
crontab: installing new crontab

Источник:
http://drawohara.com/post/6344279/crontab-temp-file-must-be-edited-in-placeвведите описание ссылки здесь

Ответ 9

Поскольку предыдущие сообщения не работали для меня из-за некоторых проблем с разрешениями, я обнаружил, что создаю отдельный файл crontab и добавляя его к пользователю crontab с параметром -u, а root работал у меня.

sudo crontab -u {USERNAME} ~/{PATH_TO_CRONTAB_FILE}

Ответ 10

Вышеприведенное сочетание правильных ответов. То, что сработало для меня за то же самое, было:

1) отредактируйте конфигурационный файл bash

$cd ~ && & vim.bashrc

2) в конфигурационном файле bash убедитесь, что по умолчанию для редактора используется vim, а не vi (что вызывает проблему)

export EDITOR = vim

3) отредактируйте файл конфигурации vim

$cd ~ && & vim.vimrc

4) убедитесь, что в вашей .vimrc

установлена ​​резервная копия yes.

установить backupcopy = yes

5) перезапустить терминал

6) теперь попробуйте crontab edit

$crontab -e

10 * * * * echo "hello world"

Вы должны увидеть, что он создает файл crontab правильно. Если вы выйдете из vim (или ZZ или: wq) и перечислите crontab следующей командой; вы должны увидеть новое задание cron. Надеюсь, это поможет.

$crontab -l

Ответ 11

Другой вариант - вообще не использовать crontab -e. Вместо этого я использовал:

(crontab -l && echo "1 1  * * *  /path/to/my/script.sh") | crontab -

Обратите внимание, что все, что вы печатаете до | crontab -, заменит весь файл crontab, поэтому используйте crontab -l && echo "<your new schedule>", чтобы получить предыдущий контент и новое расписание.