Опасности cron
⚠️ ОПАСНО: crontab -r — удаляет ВСЕ задания
Команда
Не путать:
Команда
crontab -r немедленно и без подтверждения удаляет все задания crontab текущего пользователя.Не путать:
crontab -e— редактировать задания (безопасно)crontab -l— просмотреть задания (безопасно)crontab -r— УДАЛИТЬ ВСЁ (необратимо!)
crontab -l > ~/crontab.backup
Ошибка при очистке лога через sudo echo
⚠️ Ловушка: sudo echo "" > /var/log/httpd/access_log
Эта команда не работает как ожидается — выдаст «Permission denied».
Почему: перенаправление
Правильные способы:
Эта команда не работает как ожидается — выдаст «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 архивов, что снова заполнит диск.
Правильно:
* * * * * — каждую минуту.Для ежедневной архивации логов это слишком часто. За сутки создаётся 1440 архивов, что снова заполнит диск.
Правильно:
0 0 * * * — раз в сутки в полночь.
# Неправильно (каждую минуту):
* * * * * /home/ec2-user/backup_logs.sh
# Правильно (ежедневно в 00:00):
0 0 * * * /home/ec2-user/backup_logs.sh
SSH: слишком открытые права на ключ
Ошибка подключения:
SSH отказывается использовать ключ, если у него широкие права (644, 666 и т.д.).
Решение:
WARNING: UNPROTECTED PRIVATE KEY FILE!SSH отказывается использовать ключ, если у него широкие права (644, 666 и т.д.).
Решение:
chmod 400 ich.pem # только чтение владельцем