Где хранится пользовательский crontab?


249

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

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


4
было бы неплохо, если бы кто-то мог также дать причину, ПОЧЕМУ он уничтожен
Уолтер Тросс

1
@WalterTross Да, это довольно раздражает. Я предполагаю, что это побочный эффект обновления cronпакета, но я согласен - это не то, что должно произойти.
Оли

Э-э, я не хочу, чтобы пользователь cron обновлялся за обновление пакета cron!
pl1nk

@ pl1nk Я понятия не имею, что уничтожает это, но это продолжает происходить. Призрак в машине, наверное.
Оли

Пользовательские таблицы хранятся во временной области / var / spool / cron / crontabs / $ USER, поэтому могут быть удалены при следующей загрузке или обновлении.
fcm

Ответы:


325

На самом деле, не рекомендуется обрабатывать эти файлы вручную. На crontabстраницу man:

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

Файлы ниже /var/spoolсчитаются временными / рабочими, поэтому они, вероятно, удаляются во время обновления, хотя более внимательный взгляд на cronсценарии обновления пакета может пролить некоторый свет на это.

В любом случае, всегда рекомендуется создавать резервные копии записей cron или сохранять их в файле в вашем домашнем каталоге.

Я предполагаю, что вы используете crontab -eдля создания файлов crontab на лету. Если это так, вы можете получить «копию» вашего файла crontab, выполнив crontab -l. Передайте это в файл, чтобы получить «резервную копию»:

crontab -l > my-crontab

Затем вы можете отредактировать этот файл my-crontab, чтобы добавить или изменить записи, а затем «установить» его, передав его в crontab:

crontab my-crontab

Это делает ту же проверку синтаксиса, что и crontab -e.


7
crontab -lэто проще, чем проходить в /var/spool/cron/crontabs/$USERосновном из-за странных прав доступа к этому файлу.
Оли

1
iptables-saveКрон. Хороший ...
Парфянский выстрел

4
Возможно, нам следует установить crontab для автоматического резервного копирования> :)?
PascalVKooten

4
Пролистать /var/spool/cron/crontabsудобно, если вы хотите курировать или исследовать crontabs от нескольких пользователей.
дхасенан

1
При расследовании тайны на сервере вы не знакомы, он является общим для sudo grep -rHin "$string" /etc/cron*(где строка может быть команда , как docker, lftp, iptablesи т.д. Это хорошая идея , чтобы проверить crontabs пользователей также Это то, что привело меня к этому Q & A..sudo grep -rHin "$string" /etc/cron* /var/spool/cron*
Бруно Броноски


30

Я наконец-то узнал, почему мои установки crontabs и Postfix продолжали ломаться после загрузки. Это действительно глупая причина, но ...

Я /var/spoolсмонтировал как tmpfsRAM-диск.

Звучит идиотски, и это так, но я следовал одному из старых SSD-твиков, чтобы продлить жизнь моего SSD. При этом, я слепо смонтированный /tmp, /var/tmpи , /var/spoolкак tmpfsне думая о последствиях. Я думал, что это /var/spoolпохоже /proc/или /run/и что это было полезно только на время сеанса. Я был явно неправ.


8
Должно быть безопасно смонтировать /tmpкак tmpfs, но не как /var/tmpили /var/spool. /tmpиспользуется для временного хранения, которое может быть потеряно при перезагрузке. /var/tmpиспользуется для временного хранения, которое останется после перезагрузки. И, как вы обнаружили, /var/spoolдля обработки данных, которые также останутся после перезагрузки.
Томасруттер


2
Также обратите внимание, что количество записей больше не является проблемой современных SSD.
Томасруттер

17

Чтобы вывести список всех заданий cron от всех пользователей вашей системы:

for user in $(cut -f1 -d: /etc/passwd)
do
  echo $user
  crontab -u $user -l
done

Альтернативой вашей проблеме может быть размещение их в папке cron.d и указание соответствующего пользователя для cron, как в примере:

00 01 * * * user /home/user/user-script.sh

если вы восстанавливаете crontab с другого диска, это не будет работать, потому что crontab -uон работает с вашей текущей системы.
JVE999

Хотя я полагаю, что это однострочный текст, вмещающий менее 80 символов и несколько читабельный, я обычно предпочитаю размещать код в таком формате, чтобы человек мог либо скопировать, либо вставить его в сценарий (и, в сценарии это не будет одной строкой кода). Предлагая редактировать ...
Парфянский выстрел

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