How do I set up a Cron job?
I want to schedule a task to run on a regular basis and have heard that Cron is the way to do this. How do I add Cron jobs in Ubuntu?
8 Answers 8
Put a shell script in one of these folders: /etc/cron.daily , /etc/cron.hourly , /etc/cron.monthly or /etc/cron.weekly .
If these are not enough for you, you can add more specific tasks e.g. twice a month or every 5 minutes. Go to the terminal and type:
This will open your personal crontab (cron configuration file). The first line in that file explains it all! In every line you can define one command to run and its schedule, and the format is quite simple when you get the hang of it. The structure is:
minute hour day-of-month month day-of-week command
For all the numbers you can use lists, e.g. 5,34,55 in the minutes field will mean run at 5 past, 34 past, and 55 past whatever hour is defined.
You can also use intervals. They are defined like this: */20 . This example means every 20th, so in the minutes column it is equivalent to 0,20,40 .
So to run a command every Monday at 5:30 in the afternoon:
Note that the day-of-week goes from 0-6 where 0 is Sunday.
These are system-wide and run with high privileges. I wouldn’t put anything there unless there is a pressing need for access or permission. As a rule of thumb, try to do stuff without capabilities. Therefore, I like this answer better: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
@Marcelo Morales, Which also will run the given commands as root! if you on the other hand doesn’t use sudo then you will create a user crontab and this will be run as the user who created it!
It’s worth noting these changes are applied automatically, you don’t need to restart/reload anything.
Another handy tip is that instead of */15 * * * * /path/to/command , you can do @reboot /path/to/command in order to execute something on startup.
If the job you want to run can be run with the same privileges as your user I recommend using a user crontab which you can edit by running EDITOR=»gedit» crontab -e (which will use gedit to edit the crontab file) or simply crontab -e (which will use the default editor) in a terminal.
If you want to run something every 10 minutes, for example, you add a line like this
*/10 * * * * /usr/bin/somedirectory/somecommand
You can see the contents of the user crontab with crontab -l .
To add a cron job that runs as root, you can edit root’s crontab by running sudo crontab -e .
The most flexible way is to use the system crontab /etc/crontab which you can edit only with root privileges. In this file, the user each command is to be run as is specified, so you can run your commands as root (in case you need that level of privilege) or any other user on the system.
For example, if you want to run something every 10 minutes as root, you’d add a line like this
*/10 * * * * root /usr/bin/somedirectory/somecommand
(notice the addition of the user to the line)
You can see the contents of the system crontab file with cat /etc/crontab .
Как добавить команду в Cron
При администрировании и настройке серверов очень часто надо настраивать автоматическое выполнение определенных скриптов или программ через равные промежутки времени. Это может быть резервное копирование, отправка отчётов о состоянии сервера или другие тому подобные вещи.
Служба cron — это стандартный планировщик задач в Linux. С помощью него вы можете запланировать выполнение команды или скрипта один или несколько раз, в определенную минуту, час, день, неделю и месяц. В этой статье мы подробно рассмотрим как выполняется настройка Cron в Linux на примере дистрибутива Ubuntu.
Как посмотреть задания cron
Думаю, что начать следует не с настройки, а именно как посмотреть уже настроенные задачи cron. На самом деле задачи хранятся в трёх местах:
- База данных crontab — здесь хранятся все записи cron пользователя, которые вы настраиваете вручную;
- /etc/crontab и /etc/cron.d/ — системные записи cron и записи cron различных пакетов;
- /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly — здесь лежат скрипты, которые надо выполнять раз в час, день, неделю и месяц соответственно, обычно эти папки используются различными пакетами, но вы тоже можете их использовать для своих скриптов.
Чтобы посмотреть задания cron добавленные текущим пользователем используйте команду crontab и опцию -l:
Все задачи cron разделены по пользователям, и команды из этих задач будут выполнятся от имени того пользователя, для которого они были добавлены. Чтобы посмотреть задачи другого пользователя используйте опцию -u:
А теперь давайте поговорим о том, как добавить команду cron для нужного вам пользователя.
Добавление команды в cron
Чтобы добавить задание cron из терминала можно использовать утилиту crontab. Для открытия временного файла с текущими заданиями этого пользователя выполните:
Все запланированные действия будут выполнятся от текущего пользователя, если вы хотите указать другого пользователя используйте опцию -u:
sudo crontab -u имя_пользователя -e
Команда откроет текстовый редактор, где вы сможете добавлять или редактировать задания cron. Будет использован установленный по умолчанию редактор, например, vim:
Каждая задача формируется следующим образом:
минута(0-59) час(0-23) день(1-31) месяц(1-12) день_недели(0-7) /полный/путь/к/команде
Чтобы подставить любое значение используйте звездочку «*«. Первые пять параметров характеризуют время выполнения, а последний, это путь к команде или скрипту, который нужно выполнить. Обратите внимание, что значение переменной PATH здесь не действует, поэтому путь надо писать полностью либо объявлять свою переменную PATH в начале файла настройки. Давайте сделаем простой скрипт, который будет выводить в лог дату своего запуска и поможет отладить всё это:
sudo vi /usr/local/bin/script.sh
#!/bin/bash
echo $(date) >> /var/log/testcron.log
Сделайте скрипт исполняемым:
sudo chmod ugo+x /usr/local/bin/script.sh
Самый простой пример как запускать cron каждую минуту. Вместо всех параметров ставим просто звездочку:
Или только в нулевую минуту, то есть в начале каждого часа или другими словами запуск cron каждый час:
Можно указать несколько значений через запятую, для того чтобы определить несколько точек запуска. Например, будем запускать скрипт cron каждые 15 минут:
Можно записывать значения через дефис чтобы указывать промежутки точек запуска. Например, для того чтобы запускать скрипт каждую минуту, но только первые 10 минут каждого часа используйте:
Чтобы чтобы настроить интервал выполнения более тонко можно использовать слеш (/) с помощью этого символа и звездочки можно указать шаг с которым будет выполнятся команда. Например, каждые пять минут:
Чтобы запустить cron каждые 10 минут используйте:
А для запуска cron каждые 30 минут:
Аналогичным образом задаются часы, например, выполнять скрипт только 6:00 и 18:00:
0 6,18 * * * /usr/local/bin/script.sh
А вот запустить cron каждую секунду или раз в 30 секунд не получится. Минимальная единица времени в cron это минута. Но можно создать команду, которая будет запускаться раз в минуту и по 30 секунд спать и затем снова делать:
* * * * * /usr/local/bin/script.sh && sleep 30 && /usr/local/bin/script.sh
Это довольно плохой подход и лучше так не делать. Кроме того, для экономии времени при работе с cron можно использовать специальные слова-маркеры времени. Вот они:
Для подбора правильной комбинации даты можно использовать сервис crontab.guru. Он позволяет в реальном времени посмотреть когда будет выполнено то или иное условие:
Когда настройка cron linux будет завершена, сохраните изменения и закройте файл. Для этого в Nano нажмите Ctrl+O для сохранения и Ctrl+X для закрытия редактора, а в Vim нажмите Esc и наберите :wq. Теперь новые задания Cron будут добавлены и активированы. Посмотреть как выполняется ваш Cron вы можете с помощью скрипта, который я привел выше либо в лог файле. Сервис cron пишет свои логи в стандартный журнал syslog. В Ubuntu они сохраняются в файле /var/log/syslog:
cat /var/log/syslog | grep CRON
Если во время работы возникнут ошибки cron, они тоже будут здесь. Если же вам надо добавить задание Cron из какого либо скрипта, то вы всегда можете поместить свой скрипт в папку /etc/cron.d или /cron/hourly. чтобы выполнять его когда надо, только не забудьте сделать скрипт исполняемым.
Выводы
В этой статье мы разобрались как выполняется настройка cron linux на примере Ubuntu. Как видите, все только кажется сложным, но на самом деле просто если разобраться.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.