🐛 Типичные ошибки

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

⚡ Главные опасности

  • crontab -r — удаляет ВСЕ задания без предупреждения. Не путать с -e.
  • sudo echo "" > log — не работает как ожидается. Использовать sudo truncate -s 0.
  • Пробелы в именах файлов — экранировать через \ или кавычки.

Опасности cron

⚠️ ОПАСНО: crontab -r — удаляет ВСЕ задания

Команда crontab -r немедленно и без подтверждения удаляет все задания crontab текущего пользователя.

Не путать:
  • crontab -e — редактировать задания (безопасно)
  • crontab -l — просмотреть задания (безопасно)
  • crontab -r — УДАЛИТЬ ВСЁ (необратимо!)
Восстановить удалённые задания cron невозможно, если нет резервной копии. Всегда сохраняйте копию: crontab -l > ~/crontab.backup

Ошибка при очистке лога через sudo echo

⚠️ Ловушка: sudo echo "" > /var/log/httpd/access_log

Эта команда не работает как ожидается — выдаст «Permission denied».

Почему: перенаправление > выполняется оболочкой от имени текущего пользователя, а не от root. Команда sudo повышает права только для echo, но не для операции перенаправления в файл.

Правильные способы:
# Способ 1: truncate (рекомендуется)
sudo truncate -s 0 /var/log/httpd/access_log

# Способ 2: tee
sudo tee /var/log/httpd/access_log < /dev/null

# Способ 3: через sh -c (явно запустить оболочку от root)
sudo sh -c '> /var/log/httpd/access_log'

Пробелы и спецсимволы в именах файлов

Предупреждение: имена файлов с пробелами и скобками

Файл LocalSettings (5).php — содержит пробелы и скобки. Без экранирования shell интерпретирует части имени как отдельные аргументы.

Правильное экранирование:
# Обратный слэш перед пробелом и скобками
cp /home/ec2-user/LocalSettings\ \(5\).php /var/www/html/mediawiki/LocalSettings.php

# Или в кавычках
cp "/home/ec2-user/LocalSettings (5).php" /var/www/html/mediawiki/LocalSettings.php
Неправильно: cp /home/ec2-user/LocalSettings (5).php ... — ошибка.

Ошибка: cron архивирует сам себя

Некорректное задание из проекта:
* * * * * tar -czf /var/log/httpd/log_$(date +\%Y\%m\%d).tar.gz -C /var/log/httpd .
Проблема: архив создаётся в той же папке /var/log/httpd/, что и логи. При следующем запуске tar попытается включить уже созданный архив в новый архив — это замкнутый круг, который быстро заполняет диск.

Правильно: архивы должны создаваться в отдельной директории:
BACKUP_DIR="/var/log/httpd/backups"
tar -czf "$BACKUP_DIR/access_log-$DATE.tar.gz" -C /var/log/httpd access_log

Ошибка: неверный интервал cron

Некорректный интервал: * * * * * — каждую минуту.

Для ежедневной архивации логов это слишком часто. За сутки создаётся 1440 архивов, что снова заполнит диск.

Правильно: 0 0 * * * — раз в сутки в полночь.
# Неправильно (каждую минуту):
* * * * * /home/ec2-user/backup_logs.sh

# Правильно (ежедневно в 00:00):
0 0 * * * /home/ec2-user/backup_logs.sh

SSH: слишком открытые права на ключ

Ошибка подключения: WARNING: UNPROTECTED PRIVATE KEY FILE!

SSH отказывается использовать ключ, если у него широкие права (644, 666 и т.д.).

Решение:
chmod 400 ich.pem   # только чтение владельцем