Случалось ли вам переживать тот душераздирающий момент, когда вы понимаете, что случайно удалили все свои записи в crontab?
Случайный запуск команды crontab -r – это ошибка, которая может случиться с каждым, даже с опытными пользователями Linux, учитывая близость клавиш ‘r’ и ‘e’.
Команду crontab -r, которая удаляет все запланированные задания cron, очень легко выполнить по ошибке, тем более что она находится в непосредственной близости от crontab -e, команды для редактирования этих записей.
В этом руководстве мы расскажем, как восстановить потерянные записи crontab, как регулярно создавать резервные копии записей crontab и как предотвратить случайное удаление записей Crontab в будущем.
😿 Как перечислить задания Cron в Linux
Случайное удаление записей в Crontab
Для тех, кому интересно, команда crontab -r удаляет кронтаб текущего пользователя без запроса подтверждения, что может привести к потере всех запланированных заданий cron.
Эту ошибку легко совершить, особенно под давлением напряженного дня или отвлекаясь на многозадачность.
Вот как можно исправить ситуацию и предотвратить будущие инциденты.
Как восстановить потерянные записи Crontab
- Снепшоты или резервные копии системы: Если вы или ваш системный администратор создали общесистемные резервные копии или снимки, сейчас самое время проверить их. Возможно, вы сможете восстановить свой файл crontab из недавней резервной копии.
- Резервные копии редактора: Если вы использовали crontab -e до этого и вышли из редактора без сохранения, редактор мог оставить временный файл где-то в вашей системе. Просмотрите каталог /tmp или местоположение временных файлов редактора по умолчанию.
- Инструменты форензики В крайних случаях, если данные очень важны, существуют инструменты, которые могут попытаться восстановить удаленные файлы, при условии, что данные не были перезаписаны на диске. Это более сложный процесс, который не всегда бывает успешным.
Создайте рутину резервного копирования записей Crontab
После того как вы восстановили записи кронтаба (или, к сожалению, если вы этого не сделали), очень важно запустить процедуру резервного копирования, чтобы избежать головной боли в будущем.
⌚ Как создавать и управлять заданиями Cron в Linux
Чтобы предотвратить будущие потери, вот несколько стратегий резервного копирования записей crontab:
Резервное копирование вручную
Вам следует взять за привычку вручную создавать резервные копии записей crontab перед их редактированием.
Хотя ручное резервное копирование лучше, чем ничего, оно зависит от того, помните ли вы о нем.
Чтобы создать резервную копию crontab вручную, выполните команду:
Храните эту резервную копию в надежном месте, возможно, в хранилище с контролем версий или в облачном хранилище.
Автоматическое резервное копирование записей Crontab с помощью Cron
Настройка ежедневного задания cron для автоматического резервного копирования записей crontab – отличный способ обеспечить постоянное наличие свежих копий заданий cron.
Такая практика значительно снижает риск потери данных из-за случайного удаления или других непредвиденных проблем.
Вот простой пример того, как можно настроить такое задание cron:
Отредактируйте свой crontab с помощью команды crontab -e и добавьте новую строку, как показано ниже, для автоматического резервного копирования записей Crontab в определенное время:
0 1 * * * crontab -l > /path/to/backup/directory/crontab_backup_$(date +\%Y-\%m-\%d).txt
Замените /path/to/backup/directory/ на свой путь.
Эта команда создает резервную копию записей вашего кронтаба каждый день в 1 час ночи, с именем файла, включающим дату резервного копирования, что облегчает отслеживание и восстановление при необходимости.
Автоматизированный скрипт резервного копирования
В этом подходе есть одна проблема.
Он будет создавать новые файлы каждый день в час ночи.
Это неэффективно, поскольку каталог резервных копий будет расти бесконечно.
Чтобы предотвратить это, вы можете рассмотреть возможность внедрения системы ротации и очистки резервных копий.
Таким образом, вы не дадите каталогу резервных копий разрастись слишком сильно, сохраняя только определенное количество последних файлов резервных копий.
Далее будет простой скрипт, который делает именно это.
Он создает резервные копии записей crontab в файл в определенной директории. Кроме того, через некоторое время он автоматически избавляется от старых резервных копий.
Таким образом, ваша папка с резервными копиями остается аккуратной и не заполняется старыми файлами, которые вам больше не нужны.
#!/bin/bash # Define the backup directory and file name BACKUP_DIR="$HOME/cron_backups" FILE_NAME="crontab_backup_$(date +'%Y-%m-%d').txt" # Number of days to keep backups DAYS_TO_KEEP=30 # Ensure the backup directory exists mkdir -p "$BACKUP_DIR" # Save the crontab entries to the file crontab -l > "$BACKUP_DIR/$FILE_NAME" # Delete backup files older than the specified number of days find "$BACKUP_DIR" -name 'crontab_backup_*.txt' -type f -mtime +$DAYS_TO_KEEP -exec rm {} \;
Этот скрипт предназначен для резервного копирования записей в кронтабе и управления этими резервными копиями, чтобы предотвратить захламление каталога резервных копий старыми файлами.
Вот пошаговое описание того, как работает этот скрипт:
- #!/bin/bash : Эта строка указывает, что этот скрипт должен быть запущен с помощью оболочки Bash.
- BACKUP_DIR=”$HOME/cron_backups”: Эта строка устанавливает переменную BACKUP_DIR в путь в вашем домашнем каталоге, где будут храниться резервные копии. В качестве пути используется ~/cron_backups.
- FILE_NAME=”crontab_backup_$(date+’%Y-%m-%d’).txt”: Эта строка устанавливает переменную FILE_NAME в уникальное имя файла резервной копии, которое включает текущую дату. Например, если вы запустили скрипт 27 февраля 2024 года, имя файла будет crontab_backup_2024-02-27.txt.
- DAYS_TO_KEEP=30: Указывает количество дней хранения файлов резервных копий. В нашем случае сценарий будет хранить файлы резервных копий в течение 30 дней. По истечении 30 дней он автоматически удалит старые резервные копии, чтобы сэкономить место.
- mkdir -p “$BACKUP_DIR”: Эта команда создает каталог резервных копий, если он еще не существует. Параметр -p гарантирует, что команда не вернет ошибку, если каталог уже существует, и позволяет создавать вложенные каталоги, если это необходимо.
- crontab -l > “$BACKUP_DIR/$FILE_NAME”: Эта команда получает вывод crontab -l (в котором перечислены все записи crontab для текущего пользователя) и сохраняет его в файл в каталоге резервного копирования. Файл будет назван в соответствии с переменной FILE_NAME.
- find “$BACKUP_DIR” -name ‘crontab_backup_*.txt’ -type f -mtime +$DAYS_TO_KEEP -exec rm {} \;: Эта команда ищет в каталоге резервного копирования файлы, соответствующие шаблону crontab_backup_*.txt и старше дней DAYS_TO_KEEP, а затем удаляет их. Параметр -name o
Запуская этот скрипт, вы каждый раз автоматически создаете новую резервную копию записей crontab и поддерживаете каталог резервных копий в чистоте, удаляя резервные копии старше определенного количества дней.
Такой подход помогает поддерживать историю записей кронтаба в актуальном состоянии, не управляя резервными копиями вручную.
Сохраните файл и закройте его.
А затем сделайте его исполняемым, запустив:
Запланируйте задание резервного копирования:
Далее запланируйте ежедневный запуск этого сценария через crontab.
Отредактируйте свой кронтаб с помощью команды crontab -e и добавьте новую строку для сценария резервного копирования.
Например, чтобы резервное копирование выполнялось ежедневно в 1:00 утра, добавьте:
0 1 * * * /bin/bash $HOME/cron_backup.sh
Такая настройка гарантирует, что каждый день у вас будет новая резервная копия кронтаба, надежно хранящаяся в указанном вами каталоге.
Заключение
Случайное удаление записей crontab – неприятное событие, но это не конец света.
Вы также можете избежать этого казуса в будущем, автоматически создавая резервные копии записей crontab с помощью нашего простого скрипти.
см. также:
- Как запретить пользователю, не являющемуся пользователем root, создание записи crontab
- Как разрешить только конкретным пользователям без полномочий root использовать crontab
- 🐧 Как сохранить процесс Linux запущенным после сбоя или перезагрузки
- 🐧 Все самое важное о каталоге tmp на Linux
- 🐧 Использование CRON для мониторинга и уведомления о состоянии служб на Linux
- 🌐 Блокирование вредоносных ботов, спама, юзер-агентов, Ransomware на Nginx