🐛 Типичные ошибки — урок 21

К оглавлению урока

⚡ Топ опасностей

  • ОПАСНО: rm -r $temp_dir — если переменная пустая, удалит системные файлы
  • ОПАСНО: crontab -r — удаляет ВСЕ задания без подтверждения (не путать с -e!)
  • Синтаксис crontab: 5 полей разделены пробелами, не «удобными» символами
  • Скрипт в crontab должен иметь права chmod +x и абсолютный путь
⚠️ ОПАСНО: rm -r $temp_dir (пустая переменная)

Если переменная $temp_dir пустая или содержит неверное значение, команда rm -r $temp_dir может удалить важные данные.

Пример опасной ситуации:
# Если temp_dir не задана или пустая:
temp_dir=""
rm -r $temp_dir   # выполнится как: rm -r  (может удалить текущую директорию или всё!)
Безопасная альтернатива — всегда проверяйте переменную:
# БЕЗОПАСНО: проверка перед удалением
if [ -n "$temp_dir" ] && [ -d "$temp_dir" ]; then
    rm -r "$temp_dir"
else
    echo "ERROR: temp_dir is empty or does not exist. Aborting."
    exit 1
fi
Также используйте кавычки: rm -r "$temp_dir" — тогда при пустой переменной bash выдаст ошибку вместо тихого удаления.
⚠️ ВНИМАНИЕ: crontab -r удаляет ВСЕ задания!

crontab -r и crontab -e — это разные команды с похожими флагами. Опечатка стоит потери всех cron-заданий:
crontab -e    # ПРАВИЛЬНО — открывает редактор для изменений
crontab -r    # ОПАСНО — удаляет ВСЕ задания без подтверждения!
Если вы случайно выполнили crontab -r, задания не восстанавливаются автоматически. Создавайте резервные копии:
# Сохранить текущие задания в файл
crontab -l > ~/crontab_backup.txt

# Восстановить из файла
crontab ~/crontab_backup.txt
Совет: вместо удаления всего задания его можно закомментировать, добавив # в начало строки в crontab -e.

Синтаксические ошибки в crontab

Ошибка 1: Неверное количество полей

# НЕВЕРНО — только 4 поля, пропущено одно
* * * * /tmp/script.sh

# ВЕРНО — 5 полей расписания + команда
* * * * * /tmp/script.sh

Ошибка 2: Использование запятой вместо пробела как разделителя

# НЕВЕРНО — запятая разделяет значения внутри одного поля
*/15,* * * * /tmp/script.sh

# ВЕРНО — */15 это «шаг 15»
*/15 * * * * /tmp/script.sh

Ошибка 3: Относительный путь к скрипту

# НЕВЕРНО — cron не знает рабочую директорию пользователя
* * * * * ./script.sh

# ВЕРНО — всегда абсолютный путь
* * * * * /home/user/script.sh

Ошибка 4: Нет прав исполнения на скрипт

# Скрипт не сделан исполняемым — cron молча не выполнит его
# Решение:
chmod +x /tmp/script.sh

Ошибка 5: Нет сохранения вывода → не видно ошибок

# Без логирования не узнаете об ошибках:
* * * * * /tmp/script.sh

# С логированием (stdout + stderr):
* * * * * /tmp/script.sh >> /tmp/script.log 2>&1

Типичные ошибки с tar

Ошибка 1: Перепутать -c и -x

# ОПАСНО — -x вместо -c перезапишет файлы из архива!
tar -xf archive.tar   # извлечение (может перезаписать рабочие файлы)
tar -cf archive.tar   # создание (правильно при создании архива)

Ошибка 2: Забыть флаг -f

# НЕВЕРНО — без -f tar не знает имя архива
tar -cz directory/

# ВЕРНО
tar -czf archive.tar.gz directory/

Ошибка 3: Архивировать в себя

# ПРОБЛЕМА — если archive.tar.gz находится внутри directory/:
tar -czf directory/archive.tar.gz directory/
# tar будет пытаться включить сам себя в архив

# РЕШЕНИЕ — архивировать в другое место:
tar -czf /tmp/archive.tar.gz directory/