Разве плохо редактировать файл cron вручную?


12

Обычно указывается вводить новые задания cron через командные строки; но я обнаружил, что проще (с лучшим управлением текущими задачами cron) вручную редактировать (в текстовом редакторе) пользовательский файл cron, например /var/spool/cron/crontabs/root.

Опасно ли редактировать файл в текстовом редакторе?

Комментарии в файле по умолчанию сбивают с толку. Первая строка говорит

# DO NOT EDIT THIS FILE - edit the master and reinstall.

Но четвертая строка говорит

# Edit this file to introduce tasks to be run by cron.

2
Почему бы просто не поместить вещи в /etc/cron.d?
Зоредаче

Это может быть хорошей идеей; но я не имел в виду, какой файл редактировать, я сравниваю файл редактирования с помощью редактора или запускаю команду crontab.
Googlebot

@ Все, я думаю, единственная разница - это проверка синтаксиса crontab-e. Это всего лишь текстовый буфер с проверкой синтаксиса. Вы также можете изменить свой обычный редактор, и crontab-e загрузится в него. Важность xyntax заключается в том, что весь файл будет проигнорирован, если вы сделаете ошибку. Даже если вы используете внешний инструмент, вы должны использовать crontab-e для чтения файла и отправить его обратно в crontab-e, когда закончите. При этом вам больше не нужно беспокоиться о синтаксисе. Лучше отделить файлы от пользовательских и системных задач, поэтому лучше использовать /etc/cron.d для пользовательских / тестовых задач.
m3nda

Ответы:


22

Если вы измените пользовательский файл в crontabs, он должен работать. Тем не менее, есть две проблемы, которые необходимо учитывать:

  1. Если вы неправильно набрали запись cron в файле, вы не будете предупреждены, в отличие от использования crontab -eкоманды.
  2. Вы не можете редактировать свой пользовательский файл в crontabs напрямую, не входя в систему как root или не используя sudo. Вы получите ошибку «Отказано в разрешении».

редактировать

Еще один момент, чтобы добавить. Когда вы редактируете файл напрямую, текстовый редактор может предупредить вас, если вы открыли файл дважды (два пользователя имеют доступ к одному и тому же файлу). Однако список cron будет перезаписан при использовании crontab -eдвух разных сессий оболочки одного и того же пользователя. Это еще одно отличие.


очень тонкие моменты! Я никогда не сталкивался (не знал) со второй проблемой, так как я всегда работаю как root.
Googlebot

4
Кроме того, «не редактировать» в файле по умолчанию, потому что обновление / переустановка может перезаписать этот файл.
Крис С

Вы не упомянули, что пользователь, который редактирует crontab, напрямую теряет проверку santax crontab -e.
Адам Ф

1
@AdamF: Это то, о чем говорится в пункте 1!
Халед

8

Если я правильно понимаю, вы редактируете файл вручную с помощью текстового редактора, потому что вы не хотите использовать crontab -e. Я думаю, это потому, что он использует vi в качестве редактора, а вы не знакомы с ним.

Вы изменяете crontab -e (и другие вещи, которые нуждаются в редакторе), чтобы использовать более знакомый редактор nano, запустив

export EDITOR=nano

перед

crontab -e

Вы можете сделать nano редактором по умолчанию, отредактировав файл ~ / .bash_profile, чтобы включить его export EDITOR=nanoв конце.

Чтобы ответить на ваш вопрос, вы не должны редактировать файл напрямую, потому что он может быть перезаписан без вашего ведома. 4-я строка говорит о том, что написано, потому что она взята из crontab, который вы должны редактировать вручную (это будет первая строка).


Спасибо за наглядный ответ. Я полностью знаком с редактором команд vi crontab; но я использую gedit (не в ssh-терминале), так как я напрямую подключаюсь к серверу с моего рабочего стола linux.
Googlebot

Я также рекомендую добавить команду экспорта EDITOR в ваш файл bashrc, чтобы не записывать ее каждый раз, когда вы входите в ssh.
m3nda

1
export VISUAL=vi

Это правильный способ изменить редактор для crontab.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.