Время прочтения: 3 мин.

Всем привет! Поделюсь своим опытом работы с cron и насколько гибкий shell в uni-системах.

Расскажу немного предыстории. В недавно построенном доме я решил организовать внешнее видеонаблюдение, так скажем, один из этапов в постройке «умного» дома. Камеры были установлены и передавали видео в реальном времени, под хранение я использовал свой старый системный блок под операционной системой Ubuntu. Настроив камеры на сохранения записей по движению на компьютер, я был доволен проделанной работой. Но прошло время, и я столкнулся с тем, что свободное место на моем ПК закончилось и я начал чистить старые видеозаписи. Вот тут меня посетила идея автоматизировать удаление старых файлов самой системой. На помощь мне пришел Cron – он позволяет по расписанию запускать запрограммированные процедуры на ПК под управлением операционной системы под unix. Чтобы посмотреть существующий список Cron-задач, необходимо ввести в командной строке crontab -l, и в командной строке отобразится вся информация, связанная с cron-задачами, в том числе с примерами:

Сейчас я вам кратко расскажу о задаче в примере, первые пять параметров отвечают за время запуска, шестой параметр за запуск команды:

  • Первый параметр – минуты (0-59);
  • Второй параметр – часы (0-23);
  • Третий параметр – день месяца (1-31);
  • Четвертый параметр – месяц (1-12);
  • Пятый параметр – день недели (0-7) (0 или 7 понедельник);
  • Шестой параметр – команда для выполнения.

Соответственно, я могу расшифровать пример – задача запускает архивацию домашней директории каждый вторник в пять утра.

С задачами понятно, а как удалить сами файлы, спросите вы?

Создадим скрипт вроде bat-ника на windows и будем cron’ом запускать.

На мое удивление, командная строка в unix-системах оказалась довольно-таки мощным инструментом, и решить мою задачу по поиску и удалению старых файлов оказалось очень просто. Создадим текстовый файл с расширением скрипта — .sh.

Внутри скрипта прописываем команды. Обратите внимание, что в начале файла должна быть строка «#!/bin/bash»:

  • Find – поиск объектов;

Rm – удаление объектов.

#!/bin/bash 

# Скрипт для ежедневного удаления файлов 
echo "Запуск удаления файлов" 

find /home/ftp/video/Camera1 -mtime +15 -exec rm -rf {} \; 
find /home/ftp/video/Camera2 -mtime +15 -exec rm -rf {} \; 
find /home/ftp/video/Camera3 -mtime +15 -exec rm -rf {} \; 

echo "Выдаем права" 

find /home/ftp/video -type d -mtime -1 -exec chmod 755 {} \; 
find /home/ftp/video -type f -mtime -1 -exec chmod 755 {} \; 

Этот скрипт выполняет поиск объектов, которые были созданы больше 15 дней назад и удаляет их без подтверждения. Этот скрипт удаляет все объекты: и файлы, и директории. Обратите   внимание на то, что некоторым камерам для записи необходимо наличие директории. Плюсом в этом скрипте я выдаю права на чтения. Всё, наш файл готов, теперь сохраняем его в своей директории и прописываем запуск этого файла в cron.

Для редактирования cron-задач необходимо в консоли запустить crontab с параметром -e, с этим параметром вносим изменения.

Запускаем команду, спускаемся в самый низ и вставляем следующую строку:

0 23 * * * /home/video/filedel.sh 

Сохраняем изменения, и всё готово. Задача по удалению старых файлов будет запускаться каждый день ровно в 23 часа.

Понадобилось немного строк кода для решения поставленной задачи, но у новичков в системах unix на поиск решения ушло бы время. Я надеюсь, мой опыт будет вам полезен. Если возникнут вопросы, пишите в комментарии, постараюсь оперативно ответить. А также, если будет интересен мой опыт в создании сервера на старом ПК и настройке камер, я с радостью отвечу. А если будет много вопросов, обязательно прокомментирую в новом посте.

Спасибо за прочтение!