Де зберігається користувацький crontab?


249

З моменту оновлення crontab мого користувача було вимкнено. Це вже не перший раз, коли це сталося цього року, і це біль кожного разу відновлює.

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


4
Було б добре, якби хтось також міг дати причину ЧОМУ його викреслили
Уолтер Трос

1
@WalterTross Так, це дуже дратує. Я б припустив, що це побічний ефект від оновлення cronпакета, але я згоден - це не те, що має відбутися.
Олі

Ага, я не хочу, щоб цей користувацький крон витирався за оновлення пакета cron!
pl1nk

@ pl1nk Я поняття не маю, що це витерти, але це все одно відбувається. Привид у машині, я думаю.
Олі

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

Відповіді:


325

Насправді, не рекомендується обробляти ці файли вручну. На 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.


7
crontab -lпростіше, ніж переживати /var/spool/cron/crontabs/$USERздебільшого через химерні дозволи на цей файл.
Олі

1
iptables-saveКрон. Приємно ...
Парфянський розстріл

4
Можливо, нам слід поставити crontab, щоб автоматично створити резервну копію> :)?
PascalVKooten

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

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це обробка даних, які також залишаться після перезавантаження.
thomasrutter


2
Зауважте також, що кількість сучасних SSD-дисків вже не є проблемою.
thomasrutter

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.