Расположение файла crontab

53

Как и многие другие (большинство?), я редактирую свой crontab через crontab -e, где я храню все рутинные операции, такие как инкрементное резервное копирование, ntpdate, различные операции rsync, а также превращаю фон рабочего стола на Рождество раз в год. Из того, что я понял, при новой установке или новом пользователе это также автоматически создает файл, если он не существует. Однако я хочу скопировать этот файл другому пользователю, так где же находится файл, который я редактирую?

Если это зависит от дистрибутива, я использую Centos5 и Mint 17

Ярмунд
источник
15
+1 только для того, чтобы сделать ваш рабочий стол фоном на рождественскую тему один раз в год
Celada
5
@Celada Это может быть не часто, но, тем не менее, это рутинная задача.
Джармунд

Ответы:

54

Расположение cronфайлов для отдельных пользователей есть /var/spool/cron/crontabs/.
От man crontab:

Каждый пользователь может иметь свой собственный crontab, и, хотя это файлы в нем /var/spool/cron/crontabs, они не предназначены для непосредственного редактирования.

heemayl
источник
7
Ключевыми словами являются «они не предназначены для непосредственного редактирования», поэтому этот ответ будет неполным без команды Селады, приведенной ниже, которая обеспечивает более безопасный ответ на вопрос «Скопировать другому пользователю». Если у людей есть привычка напрямую редактировать crontabs, не отправляя их через команду crontab, они отказываются от тщательной проверки, которую обеспечивает команда.
Монти Хардер
@MontyHarder Я согласен, «они не предназначены для непосредственного редактирования», но что, если в этом есть необходимость, например, необходимо сделать запись в crontab с помощью скрипта bash. Вы должны использовать точный файл, я не думаю, что какой-либо внешний интерфейс поможет в этом случае, поправьте меня, если я ошибаюсь.
Прабхат Кумар Сингх
@PrabhatKumarSingh Вы по-прежнему не должны напрямую редактировать файл. Если бы вы прочитали команду Селады ниже, вы бы увидели пример того, как скрипт может манипулировать файлом crontab без непосредственного редактирования. man crontabобъясняет, как это работает.
Монти Хардер
34

heemayl прав насчет расположения файлов crontab в Linux, но в других операционных системах он может отличаться, и «теоретически» также может быть в другом месте в Linux. По сути, когда предоставляется специальный интерфейс для доступа к файлам, вы должны его использовать. Это позволит cronпроверять файлы перед их установкой, гарантирует, что файлы имеют разрешения, необходимые для них, и т. Д ...

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

crontab -u <user1> -l | crontab -u <user2>
Celada
источник
3
Существует множество веских причин, по которым файлы crontab не должны напрямую управляться чем-либо, кроме самой ОС. Это гораздо лучшее решение. Я действительно думаю, что это должно быть включено в официальный ответ.
Монти Хардер
@MontyHarder На самом деле нет «официального» ответа. Есть ответ, который спрашивающий выбрал лично для него (ее с галочкой), и ответ, который выбрало сообщество (с наибольшим количеством голосов). Короче говоря, у вас есть 15 представителей, вы можете предположить, что это правильный ответ, проголосовав за него. Кроме того, если вы хотите предложить улучшения для другого ответа, вам необходимо прокомментировать этот ответ, иначе его автор не будет уведомлен о вашем комментарии.
Дероберт
2
Следствием этого ответа является то, что нужно перенаправить вывод crontab -lв файл, переместить файл в другую систему и направить его в crontab. Или, может быть, даже сделать это напрямую ( crontab -l | ssh $remote_host crontab).
Blacklight Shining
6
«когда предоставляется специальный интерфейс для доступа к файлам, вы должны его использовать». Представьте, что каждое приложение предоставляет специальный интерфейс для редактирования файлов конфигурации, а не просто показывает их через fs. Это было бы довольно досадно отслеживать.
Witiko
1
Как первоначальный задающий вопрос, я думаю, что я должен сосредоточиться на следующем: принятый ответ был выбран на основе моего вопроса в его буквальном смысле; расположение файла. Мои намерения в отношении этого файла не имеют значения. Я не думаю, что редактирование в дополнительной информации меняет ответ, но это может считаться излишним.
Джармунд