Как восстановить удаленный crontab

11

Я пытался редактировать crontab в терминале, и я случайно набрал crontab -rвместо crontab -e. Кто бы мог подумать, что такая опасная команда будет сидеть рядом с буквой, чтобы отредактировать crontab? Более того, я до сих пор пытаюсь выяснить, как crontab -rне просит у вас подтверждения?

Независимо от моего отсутствия доверия к тому, как это возможно, мой вопрос: могу ли я восстановить потерянный crontab?

Мигель Мескита Альфайате
источник
Просто для информации, crontab -r удалит crontab без запроса, а crontab -i запросит подтверждение.
Раман Sailopal
@RamanSailopal спасибо за информацию. это действительно опасно, учитывая тот факт, что -e и -r находятся рядом друг с другом (по крайней мере, в qwerty) ...
Мигель Мескита Альфаэйт
1
Такие вещи, как это одна из причин, почему я использую etckeeper.
Дэвид Фёрстер,
2
Восстановите его из резервной копии
PiedPiper
@PiedPiper, если бы у меня было это при резервном копировании, это не было бы проблемой. У меня есть резервные копии домашних папок, но не этот корневой crontab.
Мигель Мескита Альфайате

Ответы:

7

Вы можете найти задания cron в журнале, если он был выполнен ранее. Проверьте /var/log/cron.

У вас нет никакой опции восстановления, кроме сторонних инструментов восстановления.

Мухаммед Шериф
источник
Любые намеки на то, как я могу проверить, я что-то не пропустил? Что если бы было какое-то еженедельное или ежемесячное задание? Должен ли я идти построчно до начала прошлого месяца, чтобы узнать, работает ли у меня какой-нибудь менее распространенный cronjob?
Мигель Мескита Альфайате
Я думаю, что вы должны идти построчно за последний месяц. Извините
Мухаммед Шериф
Нет необходимости в «построчно». Используйте grepс либо -oили переданный в sed/ awk/ cut/ etc, чтобы извлечь только команду, а затем переданный в sort -u.
Патрик
3
Вам все равно придется построчно составлять графики, если они не просто ежедневные или еженедельные. Нечто подобное awk '$5 ~ "^CROND" && $6 == "(username)" { print }' /var/log/cron | sort -t ' ' -k 8покажет записи для usernameотсортированных по команде, что должно упростить просмотр интервалов между ними, чтобы вы могли воссоздать их расписания.
Джеймс
@JamesSneeringer, это определенно колдовство! большие пальцы за это!
Мигель Мескита Альфайате
2

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


источник
2

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

grep -a -B100 -A100 "command/you remember" /dev/sda1 > /tmp/cron.ressurected

Отрегулируйте -B (efore) и -A (fter) в соответствии с размером файла, но для файла cron должно хватить 100 строк. Параметр -a необходим, чтобы заставить grep рассматривать ваше устройство как текст.

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

И это занимает много времени. Удачи.

Вы также можете сослаться на этот ответ: Восстановить / восстановить удаленные файлы | Unix & Linux Stack Exchange

HexDump
источник