crontab -e
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
- $ crontab -e
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду.
Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа ‘*’. Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Примеры настройки cron
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
- $ crontab -l
Вы можете удалить все существующие задачи командой -r:
- $ crontab -r
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:
- * * * * * /usr/local/bin/serve
Далее, усложним, будем запускать каждый час, в нулевую минуту:
- 0 * * * * /usr/local/bin/serve
Еще дальше:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
- 0 0 * * * /usr/local/bin/serve
Если идти так дальше, то можно запускать в первый день каждого месяца:
- 0 0 1 * * /usr/local/bin/serve
Можно в любой день, например, 15 числа:
- 0 0 15 * * /usr/local/bin/serve
В первый день недели первого месяца года, 0 часов 0 минут:
- 0 0 * 1 0 /usr/local/bin/serve
Или в нулевой день недели каждого месяца:
- 0 0 * * 0 /usr/local/bin/serve
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
- 30 15 * * 2 /usr/local/bin/serve
Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:
- 30 15 * * sun /usr/local/bin/serve
Для того чтобы указать определенный интервал нужно использовать символ “-“, например, каждый час, с семи утра до семи вечера:
- 0 7-19 * * * /usr/local/bin/serve
Если нужно запустить команду несколько раз, можно использовать разделитель “,”. Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
- 5,35 16 * * * /usr/local/bin/serve
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - “/”:
- */10 * * * * /usr/local/bin/serve
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
@reboot - при загрузке, только один раз;
@yearly, @annually - раз год;
@monthly - раз в месяц;
@weekly - раз в неделю;
@daily, @midnight - каждый день;
@hourly - каждый час.
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
- @hourly /usr/local/bin/serve
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
- sudo vi /etc/corn.daily/backup
#!/bin/bash
……
chmod +x backup