Создание более сложных cron-задач
Теперь, когда вы понимаете основы, давайте создадим более сложную cron-задачу, которая будет записывать информацию о системе.
Создание задачи для логирования информации о системе
Создадим cron-задачу, которая будет записывать информацию о использовании памяти системы каждый час. Этот тип мониторинга может быть полезен для отслеживания производительности системы в течение времени.
Сначала создадим скрипт на shell, который будет собирать информацию о памяти:
nano ~/project/memory_check.sh
В редакторе nano добавьте следующее содержимое:
#!/bin/bash
echo "Memory check at $(date)" >> ~/project/memory_log.txt
free -m >> ~/project/memory_log.txt
echo "--------------------" >> ~/project/memory_log.txt
Этот скрипт будет:
- Добавлять временную метку в лог
- Запускать команду
free -m
для отображения использования памяти в мегабайтах
- Добавлять разделительную строку для удобства чтения
Сохраните изменения и выйдите из редактора (нажмите Ctrl+O
, Enter
, затем Ctrl+X
).
Теперь сделайте скрипт исполняемым:
chmod +x ~/project/memory_check.sh
Вы можете протестировать скрипт, чтобы убедиться, что он работает корректно:
~/project/memory_check.sh
Проверьте выходной файл:
cat ~/project/memory_log.txt
Вы должны увидеть вывод, включающий временную метку, информацию о использовании памяти и разделительную строку.
Теперь запланируем выполнение этого скрипта каждый час с помощью crontab:
crontab -e
Добавьте следующую строку (оставив существующую cron-задачу):
0 * * * * ~/project/memory_check.sh
Это запустит скрипт проверки памяти в начале каждого часа. Сохраните изменения и выйдите из редактора.
Для проверки добавления новой cron-задачи:
crontab -l
Вы должны увидеть обе cron-задачи:
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
Использование специальных строк времени
Cron также поддерживает некоторые специальные строки времени для общих шаблонов планирования:
@hourly
- То же, что и 0 * * * *
@daily
- То же, что и 0 0 * * *
@weekly
- То же, что и 0 0 * * 0
@monthly
- То же, что и 0 0 1 * *
@reboot
- Запускать при запуске системы
Давайте добавим задачу, которая будет запускаться ежедневно с использованием этих специальных строк:
crontab -e
Добавьте следующую строку:
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Сохраните изменения и выйдите из редактора. Это создаст новую запись в файле daily_check.txt
один раз в сутки в полночь.
Для проверки добавления новой cron-задачи:
crontab -l
Теперь вы должны увидеть все три cron-задачи:
*/5 * * * * date >> ~/project/date_log.txt
0 * * * * ~/project/memory_check.sh
@daily echo "Daily check on $(date)" >> ~/project/daily_check.txt
Управление выводом cron-задач
По умолчанию cron отправляет любой вывод задач на электронную почту пользователя. Если вы хотите полностью отбросить вывод, вы можете перенаправить его в /dev/null
:
*/10 * * * * ~/project/some_script.sh > /dev/null 2>&1
Это распространенная практика для скриптов, которые генерируют вывод, который вам не нужно сохранять.