Планирование процессов

Последнее обновление: 15.03.2024

Некоторые процессы могут запускаться автоматически через определенные интервалы времени. Для установки подобных процессов в Linux применяется таколй инструмент как cron. Ядром этого инструмента является процесс cron crond, который автоматически запускается на Linux и каждую минуту проверяет свою конфигурацию, чтобы увидеть, нужно ли выдавать определенную задачу. По умолчанию cron считывает свой главный файл конфигурации /etc/crontab.

Файл /etc/crontab управляет всеми задачами, которые должны быть запланированы через cron. Так, посмотрим содержимое данного файла:

eugene@Eugene:~$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
# You can also override PATH, but by default, newer versions inherit it from the environment
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *	* * *	root	cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6	* * 7	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6	1 * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#
eugene@Eugene:~$ 

Во всех конфигурациях crontab можно найти три разных элемента. Во-первых, можно увидеть указание времени, когда команда должна быть запущена. Можно использовать 5 компонентов для указания времени запуска задачи cron:

  • Минуты

  • Часы

  • День месяца

  • Месяц

  • День недели

Далее идет имя пользователя, с разрешениями которого должно выполняться задание, а последняя часть — имя команды, которую необходимо запустить.

К примеру, возьмем последнюю строку:

52 6	1 * *	root	test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }

В данном случае запускается задача test -x ... от имени пользователя root каждое 1 число любого месяца в 6:52

Обратите внимание, что лучше не изменять этот файл напрямую. Изменения, внесенные в /etc/crontab, конечно, будут работать, но вы можете потерять их, поскольку этот файл может быть перезаписан во время обновлений пакета. Помимо системного crontab, отдельные пользователи также могут иметь свой crontab. Обычно это стандартный способ измненения списка запланированных задач. Для этого вам нужно использовать команду crontab. Например, введем следующую команду:

crontab -e

Если текущий пользователь ранее не создавал подобных задач, то ему будет выведено соответствующее сообщение:

eugene@Eugene:~$ crontab -e
no crontab for eugene - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        >---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 

Выберем предпочтительный текстовый редактор. В результате откроется окно редактора, в котором можно определить задачи для автоматического запуска через cron:

40 17 * * 1-5 ps aux > ~/Documents/proclog

Здесь говорится запускать команду ps aux > ~/Documents/proclog в 17:40. Цифры 1–5 в качестве дня недели указывает процессу cron запускать эту задачу только в дни с 1 по 5, то есть с понедельника по пятницу.

Если потом потребуется удалить задачу, то также можно открыть файл и удалить или закомментировать данную строку

Аналогично можно открыть файл и добавить в него новые задачи или изменить уже имеющиеся.

Еще один способ запуска задач через cron — создание файлов в /etc/cron.d. Все файлы в каталоге /etc/cron.d будут включены при запуске процесса cron>. Использование этого подхода предлагает альтернативу внесению изменений в файл /etc/crontab. Преимущество этого подхода в том, что изменения не потеряются при обновлении программного обеспечения. Содержимое файлов в /etc/cron.d точно такое же, как содержимое строк, добавленных в /etc/crontab.

Cron также использует четыре разных каталога для выполнения задач через равные промежутки времени. Это каталоги /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly и /etc/cron.monthly. В эти каталоги вы можете поместить скрипты, которые будут выполняться через указанные промежутки времени. Содержимое этих сценариев представляет собой код скриптов оболочки bash, и они не содержат каких-либо индикаторов времени, специфичных для cron.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850