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



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



Если кратко, я глянул в логи /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, мол они гибче и безопаснее. Ну хз хз, каждый привык выбирать свои игрушки.



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



tags: #bash #linux



💩 @bashdays