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

Переписка об ошибочном удалении crontab.

Переписка об ошибочном удалении crontab.

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

Если кратко, я глянул в логи /var/log/cron, взял рандомную таску, которая выполнялась ранее, и вбил:

grep -a -C 500 -F 'console import:reports' /dev/sda1

Соответственно, console import:reports — это часть таски, которая когда-то выполнялась. Команда отработала и нашла мне удалённый cron-файл. Копипаста — и все рады. Но тут, опять же, повезло, что данные не были перезаписаны на диске.

В любом случае можно было бы восстановить по хронологии из файла /var/log/cron, но уже с геморроем. Либо грепнуть CRON в syslog и journald.

На будущее сделал клиенту алиас:

alias crontab="crontab -i"

Этакая защита от дурака и толстых пальцев. Теперь если перепутать «e» и «r», то оно выругается и запросит подтверждение:

crontab: really delete root’s crontab? (y/n)

Ну и на будущее не забывай делать бэкапы. Хотя сколько ни говори, никто не делает, пока петух не клюнет. Хотя сколько меня ни клевал, я всё равно зачастую забиваю — видимо, уверен, что смогу всё восстановить.

Бэкап крона:

@daily crontab -l > $HOME/.crontab

Восстановить:

crontab < $HOME/.crontab

А вообще часто советуют использовать systemd timers вместо cron или systemd-cron: мол, они гибче и безопаснее. Ну, хз, хз — каждый привык выбирать свои игрушки.

Всех с пятницей, хороших предстоящих выходных. Увидимся!