Теперь поделюсь своими знаниями в области выполнения заданий по расписанию в linux. За выполнение заданий по расписанию отвечает утилита cron. Наверняка многоие о ней слышали. Она достаточно проста в настройке и использовании, поэтому я не буду ее подробно описывать, к тому же, в сети существует множество клавиатур по службе с этой программой. Суть в чем: вы задаете в настройках что необходимо выполнять (программу, script или элементарно команду), указываете интервал выполнения: каждую минуту/час/день пример в 9:15 утра и все — ваше поручение будет выполняться в указанное время. Но есть один аспект: если в назначенное время исполнения задания ваш компьютер будет выключен, то это задание благоприятно НЕ выполнится. Поэтому, если желаете пользоваться cron`ом, то держите компьютер постоянно аннексированным. Конечно совет выше быстрее шуточный (если у вас не сервер), есть еще одно заключение этой проблемы — anacron. Как следовательно из названия, это асинхронный крон. Он выполняет задания не в некоторое вами время, а через данный промежуток времени и в случае, если компьютер станет выключен в нужное время, anacron осуществит это задание при следующей загрузке системы.
Все бы хорошо, но по anacron`у (в отличие от cron) умной информации в сети кот наплакал, да и то она вся на английском слоге. Поэтому мне пришлось, что называется, методом академического тыка осваивать эту программу. Теперь помалее о использовании anacron. Все задания вносятся в файл /etc/anacrontab. Готовить к печати этот файл возможно любым используемым вами текстовым редактором, только нужны права root-пользователя. Так как anacron сможет выполнять задания только от рута. В связи с данным, все задания необходимо откорректировать с учетом данной особенности. Например если в задании вы утилизируете указание пути вида:
%HOME/путь/до/файла
то необходимо заменить его такой строчкой:
/home/username/путь/до/файла
Формат файла такой: период в днях | заминка в минутах | чудесное имя для задания | выполняемая команда. Как видите набор параметров невелик. Но данного вполне довольно. Рассмотрим например такую строку:
@daily 5 test echo "Привет"
• @daily значивает что слово «Привет» будет выводиться каждый день. Кстати сказать, минимальный период в анакрон равновесен одному дню. Вместо @daily можно использовать @weekly, @monthly или соответствующее им цифровое обозначение периода в днях: 1/7/30 или любое другое число.
• 5 означает задержку в минутах перед исполнением поручения. Обычно ее используют чтобы дать компьютеру полностью загрузиться. Так как все задания исполняются по очередности при первой загрузке компьютера в назначенный день.
• test — это имя задания. В папке /var/spool/anacron хранятся файлы с именами заданий, внесенных в файл anacrontab. В каждом таком файле дата конечного выполнения задания в формате YYYYmmdd. В этих файлах весь секрет: основываясь на дате конечного выполнения, анакрон отсчитывает от нее нужный период и снова выполняет задание, записывая новую дату в этот файл. Есть небольшая хитрость. Например нужно чтобы какое-то задание выполнялось каждый вторник, а вносим мы это задание в anacrontab в четверг. Так как анакрон не дает возможности выбрать конкретный день выполнения задания, а только интервал, то следуя логике наше задание будет выполняться по четвергам, что нам не нужно. Для исправления такого поведения можно вручную, от рута, досоздать файл test (то имеется с именем задания из anacrontab) в папке /var/spool/anacron с датой заключительного вторника в формате, какой я приводил выше и анакрон будет думать что в прошлый вторник он уже исполнял это задание (то, что предназначено для выполнения, поручение), поэтому следующий раз выполнит его в следующий вторник. Но один нехороший момент все же остается: когда компьютер в какой-нибудь из вторников не будет ни разу загружен, а включат его например в среду, тогда выполнение задания test сместится на один день и будет происходить по средам. Для исправления нужно опять же отредактировать файл test и выставить в нем нужную дату.
• echo «Привет» — практически команда для выполнения. Здесь может быть команда, путь к установленной программе или скрипту (script обязан быть исполняемым).
Для максимальной настраиваемости в файле /etc/anacrontab есть еще две опции, на какой-никакие стоит обратить внимание:
• вот:
START_HOURS_RANGE=3-22
указывает в какой проем времени станут выполняться задания в день Х. Если нужно чтобы они выполнялись не сходу после загрузки пк (если конечно эта загрузка была утром), а в период с 16:00 по 22:00, то цифру 3 нужно заменить на 16;
• и вот:
RANDOM_DELAY=45
устанавливает случайное время задержки в минутах от 0 до 45 перед выполнением задания. Да, я помню, что время задержки мы уже указывали. Этот параметр суммируется с указанным нами временем и после этого задание выполняется. Честно говоря, не совсем соображаю мотивы разработчиков с применением этой опции, но им виднее…
Вот, собственно и вся нехитрая наладка anacron.
Сейчас еще о хитростях: в папке /etc есть папки cron. daily, cron. weekly и cron. monthly. Так вот, когда необходимо чтобы задания выполняись ежедневно/еженедельно/ежемесячно, то достаточно скопировать свой скрипт, который нужно выполнять в соответствующую папку или даже ссылку на скрипт и все, бесхарактерных правок anacrontab. Задание будет выполняться! Единственное НО: название вашего скрипта должно быть на латинице. Но чтобы anacron работал его в первую очередь нужно установить. Присутствует несколько программ, включающих в себя функциональность anacron: cronie, dcron, fcron и практически anacron. В Archlinux используется cronie. Она входит в группу base, поэтому устанавливается по умолчанию. Для запуска cronie можно использовать такие команды:
sudo systemctl start cronie
sudo systemctl enable cronie

