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

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

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

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

Каждый пользователь может иметь свой собственный 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.

Его хранят внутри /var/spool/cron/crontabs папка под именем пользователя.

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

Я имел /var/spool монтируется как tmpfs Оперативная память-накопитель.

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

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

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

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

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

было бы неплохо, если бы кто-нибудь также мог указать причину, ПО КОТОРОЙ он был уничтожен

Просто хочу упомянуть, что здесь есть инструкции о том, как восстановить случайно удаленный crontab с помощью журналов: unix - Crontab deleted? - Super User Это не совсем то, о чем вы спрашивали, но это может быть кому-то полезно.

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

Э-э, я не думаю, что пользовательские cron удаляются при обновлении пакета cron!

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

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