Задачи cron и автоматизация в Linux

Если вы заняты в сфере IT, у вас часто может возникать потребность в автоматизации каких-то повторяющихся задач. Например, если нужно ежедневно делать бэкапы, ежемесячно архивировать логи, еженедельно удалять файлы для очистки пространства.
И если ваша рабочая ОС — Linux, для автоматизации всех этих процессов можно использовать такой инструмент как cron.
Что такое cron?
Cron — это утилита для составления расписания задач, имеющаяся в Unix-подобных системах. Функционал этой утилиты включается демоном crond и выполняется в фоне. Для запуска скриптов cron читает crontab («таблицы cron).
Вы можете настроить задачу cron, чтобы запланировать автоматическое выполнение скриптов или запуск команд. Для этого используется специальный синтаксис.
Когда речь идет об отдельных пользователях и их задачах, cron руководствуется файлом /var/spool/cron/crontabs.

Что собой представляют задачи cron?
Любая задача, которую вы запланировали в cron, называется задачей cron. Эти задачи помогают нам автоматизировать рутинные действия, выполняемые регулярно с определенной периодичностью.
Давайте рассмотрим подробнее работу cron-задач.
Доступ к cron
Чтобы пользователь имел доступ к задачам cron, админ должен разрешить это в файле /etc/cron.allow.
Если вы получаете уведомление, как на скриншоте ниже, значит, вам не разрешено использовать cron.

Чтобы разрешить Джону доступ к cron, включите его имя в /etc/cron.allow. После этого он сможет создавать и редактировать cron-задачи.

Пользователям также можно запретить доступ к cron-задачам, внеся их имена в файл /etc/cron.d/cron.deny.
Как добавлять задачи cron в Linux
Для начала нужно проверить статус сервиса cron. Если cron не установлен, вы можете без проблем загрузить его при помощи менеджера пакетов. Для проверки статуса введите следующую команду:
# Check cron service on Linux system sudo systemctl status cron.service
Синтаксис задач cron
Для добавления и вывода задач crontab используется следующие флаги:
- crontab -e: редактирование содержимого crontab для добавления, удаления или изменения задач.
- crontab -l: вывод всех cron-задач текущего пользователя.
- crontab -u username -l: вывод задач другого пользователя.
- crontab -u username -e: редактирование задач другого пользователя.
Выведя на экран задачи cron, вы увидите что-то типа этого:
# Cron job example * * * * * sh /path/to/script.sh
— звездочки * * * * * представляют минуты, часы, дни, месяцы и дни недели (соответственно).
| Значение | Описание | |
|---|---|---|
| Минуты | 0-59 | Команда будет выполняться в указанную минуту. |
| Часы | 0-23 | Команда будет выполняться в указанный час. |
| Дни | 1-31 | Команда будет выполняться в указанный день месяца. |
| Месяцы | 1-12 | Месяц, в котором должна выполняться команда. |
| Дни недели | 0-6 | Дни недели, по которым должна запускаться команда. Здесь 0 — воскресенье. |
— sh говорит о том, что это bash-скрипт, и запускаться он должен из /bin/bash.
— /path/to/script.sh указывает путь к скрипту.
От редакции Techrocks. Нам показалось, что в пояснении синтаксиса не хватает подробностей, поэтому дополняем.
Указать периодичность меньше минуты нельзя, потому что cron читает расписание раз в минуту.
Время и дату выполнения можно указывать:
- звездочками * — тогда задача выполняется каждую/й — в зависимости от того, на какой позиции стоит звездочка
- целыми числами — чтобы указать точно время или дату
- целыми числами через запятую — перечисляем нужные минуты, часы и т. д.
- диапазонами, через дефис (например, 1-10) — чтобы задача выполнялась в определенный диапазон времени или дат
- с определенным шагом.
На последнем пункте остановимся подробнее. Для указания шага используется синтаксис */целое-число . Указанное целое число — шаг.
Например, если на позиции месяца стоит */4 , это значит, что задача будет выполняться каждый четвертый месяц . А если на позиции минут стоит 0-59/2 , это значит, что задача будет выполняться каждые две минуты.
Ниже представлена схема синтаксиса cron-задач.
* * * * * sh /path/to/script/script.sh | | | | | | | | | | | Команда или скрипт, которые нужно выполнить | | | | | | | | | | | | | | | | | | | День недели(0-6) | | | | | | | Месяц(1-12) | | | | | Число месяца(1-31) | | | Час(0-23) | Минута(0-59)
Примеры cron-задач
В таблице представлены три примера cron-задач.
| Расписание | Значение |
|---|---|
| 5 0 * 8 * | В 00:05 в августе |
| 5 4 * * 6 | В 04:05 в субботу |
| 0 22 * * 1-5 | В 22:00 ежедневно, с понедельника по пятницу |
Если вам не удается с лету понять, на когда назначено выполнение задач, не огорчайтесь. Вы можете попрактиковаться в генерации расписаний cron на crontab guru.
Как создавать задачу cron
В этом разделе мы рассмотрим пример того, как можно запланировать автоматический запуск простого скрипта.
1. Создайте скрипт с именем date-script.sh. Он должен выводить системную дату и время и добавлять их в файл. Скрипт выглядит так:

2. Сделайте этот скрипт исполняемым, отредактировав права при помощи chmod.
chmod 775 date-script.sh
3. Добавьте скрипт в crontab при помощи crontab -e.
Мы указали, что скрипт должен выполняться каждую минуту:

4. Проверьте результат, просмотрев содержимое файла date-out.txt. В этом файле ежеминутно должна добавляться запись с системным временем.

Возможные проблемы и их решение
Cron-задачи очень полезны, но они не всегда срабатывают так, как вы задумали. К счастью, есть несколько эффективных способов справиться с этим.
1. Проверьте расписание
Для начала нужно проверить, что за расписание установлено для задачи. Сделать это можно при помощи команд crontab -l или crontab -u username -l (мы говорили о них ранее).
2. Просмотрите логи cron
Проверьте, запускается ли cron в намеченное время. Это можно посмотреть в логах, в var/log/cron. В некоторых дистрибутивах логи можно найти в /var/log/syslog.
Если в логах есть записи в соответствующее время, это означает, что сам cron запускается по расписанию.
Ниже представлен пример логов для задач cron. Обратите внимание на первый столбец с метками времени. В конце строк указаны запускаемые скрипты.

3. Перенаправьте output в файл
Вы можете перенаправить результаты работы cron в файл, чтобы поискать затем возможные ошибки.
# Redirect cron output to a file * * * * * sh /path/to/script.sh &> log_file.log
Итоги
Автоматизация задач уменьшает количество рутинной работы. Кроме того, машина может запускать задачи точно по указанному времени, и это не требует никакого вмешательства человека.
Автоматизация в Linux завязана на задачах cron, так что эту утилиту определенно стоит изучить. Поэкспериментируйте с ней!
Как использовать задачи в cron для автоматизации на Ubuntu 14.04


Добавить в избранное
Главное меню » Операционная система Ubuntu » Как использовать задачи в cron для автоматизации на Ubuntu 14.04
Крон является одним из самых мощных инструментом в базе Linux / Unix операционных систем. Cron это утилита, которую Linux использует для планирования задачи, которая будет выполнена в определенное время в соответствии с графиком его, в назначенное время.
Чаще всего они используются для автоматизации деятельности по администрированию системы и техническое обслуживание. Как и рассылка уведомления каждый день об успешном завершении запланированных резервных копий или очистки каталога /tmp/ . Есть много других ситуаций, когда веб — приложение требует периодически запускать определенные задачи.
Итак, в этой статье мы будем направлять вас о своем рабочем механизме и показать, как легко вы можете планировать свои задачи с помощью заданий Cron. «Cron» сам по себе это демон, который работает в фоновом режиме, а график различных задач находится в конфигурационном файле под названием «Crontab«, где все задачи и сроки планируется.
Запуск Cron Service
Почти все дистрибутивы Linux поставляется с предварительно установленной Cron по умолчанию. В случае, если он не установлен на вашем компьютере, вы можете установить его с помощью следующей команды.
apt-get install cron
Теперь проверьте статус службы Cron, она должна быть запущена в фоновом режиме по умолчанию, вы можете запустить его с команды запуска, если он в остановленном состоянии.
service cron start service cron status #cron start/running, process 1027
Использование помощи по Cron
После того, как ваша служба Cron установлена, вы можете продолжить вперед и начать использовать его. Для получения дополнительной справки о его использовании вы можете проверить свои страницы человека, выполнив следующие команды.
man crontab

Эта команда показывает общие инструкции о помощи Crontab. Для того, чтобы получить более конкретную информацию о том, как использовать задачи в Cron, вы также можете проверить с помощью следующей команды.
man 5 crontab
Для выхода из руководства просто нажмите q или h .
Использование команды Crontab
Здесь мы покажем вам некоторые наиболее важные команды, которые используются для планирования автоматизированных задач с помощью команды Crontab.
Список задач Cron
Используйте следующую команду для получения списка запланированных заданий Cron для текущего авторизованного пользователя.
crontab –l
В команде вывода покажет вам весь список задач, работающих под управлением этого пользователя. Если вы хотите отобразить задания другого пользователя, то мы можем проверить это с помощью следующей команды.
crontab –l –u username
Это будет список задач где упоминалось имя пользователя: username .
Редактирование задач Cron
Чтобы добавить новую задачу или отредактировать существующую, мы будем использовать следующую команду Crontab.
crontab -e
Удалить задачу Cron
Команда может быть использована для удаления запланированных заданий Cron.
crontab –r
Это удалит все задачи без запроса подтверждения. Используйте , -ir если вы хотите, чтобы задачи удалялись в интерактивном режиме .
crontab -ir
Планирование задач с помощью Crontab
Теперь мы начинаем использовать задачи с помощью конфигурационного файла, который находится в crontab, в то время как существуют различные способы использования Cron. Вы найдете некоторые каталоги, как cron.daily , cron.hourly , и cron.monthly и т.д. Так что, если вы поместите сценарий задачи в один из этих каталогов, то они будут запускаться по графику в зависимости от имени каталога.
Типы конфигурации Cron
Существуют два типа конфигурационных файлов, которые используются для планирования автоматизированных задач.
Система Crontab
Эти задания Cron используются системными службами и критическими задачами, которые требуются привилегии корневого уровня. Мы можем проверить общесистемный crontab в файле /etc/crontab .

Crontab пользователя
Пользовательские задания уровня хрон задаются отдельно для каждого пользователя, так что каждый пользователь может создавать свои собственные задачи с помощью команды crontab .
Мы можем проверить или редактировать пользовательские задания уровня хрон с помощью следующей команды.
crontab –e

После выбора редактора вы сможете настроить свои новые рабочие места хрон здесь.
Планирование заданий с помощью Crontab
Мы можем планировать задачи, используя свой специальный синтаксис. Существуют также различные короткие ручные команды, которые могут быть использованы в файле crontab, чтобы создавать задачи с легкостью.
Синтаксис записи кронтаб должен быть следующим:
#* * * * * command to be executed #- - - - - #| | | | | #| | | | ----- Day of week (0 - 7) (Sunday=0 or 7) #| | | ------- Month (1 - 12) #| | --------- Day of month (1 - 31) #| ----------- Hour (0 - 23) #------------- Minute (0 - 59)
Теперь вы знакомы с командами crontab, синтаксис и типы задач в cron, в настоящее время мы создадим несколько тестовых заданий, добавим в крон и посмотрим, как это работает. Вы можете запланировать любую из вашей повседневной задачи, добавив его с командой crontab –e .
Планирование заданий для запуска каждую минуту
В этом примере мы создадим cronjob, который будет выполнять текст «Тест задачи cron выполняется каждую минуту» каждую минуту и отправить по электронной почте user@andreyex.ru .
Ваше первое действие, это редактирование кронтаб с командой ниже:
crontab –e
Поместите следующий скрипт cronjob в cronjob и сохраните изменения.
SHELL=/bin/bash HOME=/ MAILTO=”user@andreyex.ru” #This is a comment * * * * * echo 'Тест задачи cron выполняется каждую минуту' :wq!

После того, как вы сохраните файл, вы получите вывод вроде crontab: installing new crontab . Таким образом, это означает, что вы успешно добавили новую задачу в cron.
Планирование задания Cron в определенное время
Теперь давайте посмотрим, сценарий, если вы хотите запланировать задания cron для запуска в определенное время, как в «7:00 вечера» каждый четверг.
00 15 * * 4 sh /root/test.sh
Давайте добавим эту строку в crontabs используя следующие команды.
crontab -e crontab: installing new crontab
В приведенном выше сценарии «00 15» относится к 3:00 PM в то время как «4» относится ко дню «четверг».

Вывод
В конце этой статьи вы узнали, как легко можно автоматизировать задачи с помощью crontabs вместо того, чтобы делать это вручную с помощью повторений. Вы узнали о его основных команд и синтаксиса, который будет помогает вам при создании собственных задач.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Что такое Core Scheduling и кому он будет полезен?

Не за горами выход новой версии ядра Linux 5.14. За последние несколько лет это обновление ядра является самым многообещающим и одно из самых крупных. Была улучшена производительность, исправлены ошибки, добавлен новый функционал. Одной из новых функций ядра стал Core Scheduling, которому посвящена наша статья. Это нововведение горячо обсуждали в интернете последние несколько лет, и наконец-то оно было принято в ядро Linux 5.14.
Если вы работаете с Linux или занимаетесь информационной безопасностью, вам интересны новые технологии, то добро пожаловать под кат.
▍Введение
Для того чтобы понять Core Scheduling и для чего он нужен, стоит разобраться, как работают многозадачные системы, и как они развивались.
На современных компьютерах одновременно могут работать сотни, а то и тысячи программ одновременно. Монопольный доступ к процессору и памяти остались в прошлом, и на данный момент практически нигде не используется кроме микроконтроллеров и RT(Real Time) задач.
Изначально все процессоры были одноядерными, и могли выполнять только одну задачу одновременно. Практически сразу появилась необходимость выполнять несколько задач одновременно на одноядерном процессоре. Для этого был придуман scheduler, он же планировщик в операционных системах, который занимается переключением задач и управляет ресурсами компьютера. Ядро операционной системы всегда работает с большими привилегиями, чем пользовательские программы, такой режим работы называют Ring 0. Поэтому планировщик может в любой момент приостанавливать выполнение одной задачи и перейти к выполнению следующей. В нём существует специальная очередь задач, в которую добавляются все работающие программы и обработчики ядра, например, обработчик прерываний. Изначально эта очередь была простая, как очередь в магазине, и каждая программа выполнялась по очереди, как бы подходя к кассе в магазине. Каждая задача, после того, как выполнила свою работу, должна была явно уведомить планировщик, что задача завершила свою работу и планировщик может переключиться на следующую задачу. Такую очередь называют FIFO — First In First Out первым пришёл, первым ушёл. А такую многозадачность называют совместной или кооперативной многозадачностью.
Дальше очередь стала более сложной и появились приоритеты с вытеснением, задачи с более высоким приоритетом могут встать в очереди перед задачами с более низким приоритетом, или некоторые задачи вовсе могут быть пропущены в этом цикле обхода очереди. Простой пример такой очереди, когда в очереди к директору компании стоят сотрудники, но приходит какой-нибудь проверяющий, или какое-то важное лицо, и всех просят подождать, пока директор пообщается с этим более важным человеком. А могут и вовсе кого-то выгнать из кабинета начальника: -«Семён Семёнович, незамедлительно покиньте кабинет директора, к нему министр тяжёлой промышленности приехал!». Решение о переключении задач при такой многозадачности принимает OC. Через запрограммированные промежутки времени по таймеру происходит прерывание, и запускается планировщик, который переключает процессор на выполнение следующей задачи. Такую многозадачность называют вытесняющая многозадачность или PREEMPT, preemptive multitasking.
Каждая задача в ядре Linux описывается структурой task_struct, а список задач хранится в виде циклического двусвязного списка (Связный список). Описание структуры task_struct можно найти в файле: include/linux/sched.h исходников ядра. task_struct ещё называют дескриптором процесса и в нём находится вся важная информация об исполняемом процессе. Мы не будем углубляться в эту тему слишком глубоко, так как это тема отдельной статьи. Но вы всегда можете найти комментарии и пояснения к коду, в файле: include/linux/sched.h , и изучить эту тему самостоятельно. Умение читать исходные коды ядра, является очень важным навыком для каждого разработчика, который хочет углубиться в программирование ядра Linux. Часть полезной информации также можно найти в официальной документации ядра Linux — Scheduler, но всё же лучше смотреть исходные коды ядра.

Со временем системы стали многоядерными и имели количество потоков выполнения — равное количеству ядер процессора или количеству процессоров, в случае с одноядерными процессорами, что, в свою очередь, повысило возможности компьютеров и количество выполняемых задач одновременно. Чтобы уменьшить накладные расходы переключения задач в ОС, разработчики процессоров придумали простое и элегантное решение, переложили часть функций на процессор. Так были придуманы Intel Hyper-Threading (Intel HT) и AMD Simultaneous Multithreading (AMD SMT).
Технологии очень простые: Теперь вместо реальных ядер процессор начал показывать виртуальные ядра в количестве реальных ядер умноженных на 2. Процессоры с 1 ядром начали иметь 2 виртуальных процессора (2 потока выполнения), которые видит ОС. Теперь в процессоре, имея два потока выполнения на каждое ядро, ядро процессора может не простаивать, когда один из потоков спит, а переключится на второй поток. Тем самым процессор будет переключаться между потоками с минимальными задержками, и по максимуму использовать возможности каждого ядра.
Как работают Intel HT и AMD SMT можно понять по картинкам ниже. Первая картинка показывает, как занята очередь процессора при выполнении двух задач, а на второй картинке показана временная диаграмма, и что в случае с Intel HT и AMD SMT на обе задачи суммарно было потрачено меньше времени.


На самом деле, в некоторых случаях это решение является очень спорным и не даёт какого-либо выигрыша производительности. Но в некоторых задачах всё же есть заметный выигрыш, например, в виртуализации. Ничего не предвещало беды, но, как говорится, беда подкралась неожиданно…
Долгое время никто не замечал главной проблемы этой технологии. Все потоки используют одни и те же кэши и аппаратные возможности процессора. Это открыло уязвимость, что один процесс может извлекать данные, наблюдая за изменениями кэша другим процессом. Только с ростом потребностей бизнеса и популяризации виртуализации, такая уязвимость стала чаще обсуждаться. Единственным способом безопасно запускать два процесса не доверяющих друг-другу стало отключение Intel HT и AMD SMT. С появлением уязвимостей класса Spectre данная проблема ещё больше усугубилась и поставила облачных провайдеров перед очень тяжелым выбором: отключить Intel HT и AMD SMT? И даже вызывало сильное раздражение, так как клиенты — бизнес требуют безопасности их данных. Но что же это для них значило? Конечно же, увеличение затрат и миллионные потери прибыли. Если при наличии Intel HT и AMD SMT они могли иметь больше клиентов чем ядер, и клиенты могли балансироваться между ядрами и выравнивать нагрузку на процессор, то теперь все облачные технологии готовы были заключить в жесткие рамки количества реальных ядер. И тут облачные провайдеры задумались не на шутку, как сделать так чтобы оставить включенными Intel HT и AMD SMT, сделать данные клиента безопаснее, например, закрытые ключи шифрования и пароли. Так появился на свет Core Scheduling, который безопасно может выполнять потоки.
▍Core Scheduling
Как же работает Core Scheduling? Всё очень просто! Каждому процессу назначается метка — cookie , по которому его можно идентифицировать. Так же свой уникальный cookie можно назначить каждому пользователю. Тем самым ядро разрешает совместное использование процессора только в случае, если у двух процессов совпадает cookie . Как говорится, всё гениальное просто!

Для управления процессами или потоками используется системный вызов prctl:
int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5);
В случае с Core Scheduling системный вызов принимает вид:
int prctl(PR_SCHED_CORE, int command, pid_t pid, enum pid_type type, unsigned long *cookie);
Где PR_SCHED_CORE говорит, что это операция с Core Scheduling, command это команда которую надо выполнить, pid process id — цифровой идентификатор процесса, pid_type тип pid, cookie — беззнаковое 32 битное число метки.
Для работы с Core Scheduling существует 4 команды:
- PR_SCHED_CORE_CREATE — говорит ядру создать новый cookie и назначить его процессу с pid . С помощью параметра pid_type мы можем управлять шириной назначения cookie. Если значение равно PIDTYPE_PID , то cookie устанавливается для конкретного процесса с pid , а при PIDTYPE_TGID всей группе потоков. cookie не должен быть равен NULL .
- PR_SCHED_CORE_GET — получает cookie для указанного pid , и сохраняет его в переменной cookie . Вы могли обратить внимание, что системному вызову передается не само значение cookie, а указатель на место в памяти где находится значение переменной cookie , тем самым системный вызов свободно может читать и писать значения по этому адресу. Полезность данной команды заключается только в получении cookie двух процессов и их сравнения. Большей ценности данная команда не имеет.
- PR_SCHED_CORE_SHARE_TO — процесс который вызвал prctl может поделится своим cookie с процессом pid которого был передан. В остальном команда полностью повторяет параметры PR_SCHED_CORE_CREATE.
- PR_SCHED_CORE_SHARE_FROM — извлекает cookie у процесса с pid , и назначает вызвавшему prctl .
Включить Core Scheduling можно при сборке ядра: General setup —> [*] Core Scheduling for SMT . Так же вы можете прочитать мою статью LTO оптимизация ядра Linux .
Так вот, если в системе включен Core Scheduling, то когда планировщик берет новую задачу с наивысшим приоритетом из списка, то он отправляет прерывание на родственные процессоры, на что каждый из них должен проверить cookie новой задачи и ответить есть ли задачи на нём с таким же cookie . Таким образом, при совпадении cookie , процессор уже имеющий задачу с таким же cookie , начинает выполнение этой новой задачи. Если же в системе нет процессов имеющий одинаковый cookie , то процессор будет бездействовать, пока такие процессы не появятся. Чтобы предотвратить простой процессора, планировщик будет переносить процессы между ядрами.
К сожалению первые версии Core Scheduling имели большой недостаток — высокие накладные расходы, падала производительность системы т.к. в некоторые моменты времени Core Scheduling заставлял процессор бездействовать, что в итоге стало ещё хуже чем отключение Intel HT и AMD SMT. Но со временем удалось улучшить алгоритм и решать большую часть проблем, но всё же не бесплатно. Поэтому Core Scheduling не подходит каждому т.к. немного снижает производительность системы, а только тем, кому очень важна безопасность, например облачным провайдерам. Так же Core Scheduling не подходит задачам которым важна скорость реакции, так называемые Real Time задачи, для них вовсе рекомендуется отключить Intel Hyper-Threading(Intel HT) и AMD SMT.
Как можно понять из статьи не бывает ложки меда без капли дегтя. Но развитие технологий идет и старые проблемы решаются, хоть не всё всегда идеально. Изначально Core Scheduling был протестирован мною на ядре 5.13-rc с патчами, и в принципе в нём не сложно включить Core Scheduling, но в одном из обновлений ядра 5.13 перестали работать патчи, и их надо было много править, что не имело уже большого смысла для меня и ядро 5.14 уже было более интересно для изучения. Мой актуальный набор патчей для ядра вы всегда можете скачать по ссылке, там всегда актуальные и стабильные патчи, которые не влияют на стабильность системы, но приносят ряд улучшений.
Моя прошлая статья LTO оптимизация ядра Linux вызвала у читателей много вопросов. Было много доброжелателей, которые мне писали лично и благодарили. Были и такие которые писали, чтобы поругаться и даже катали жалобы на мои проекты. Конечно же доброжелателей было значительно больше. Поэтому дам краткий ответ на частые вопросы:
- Насколько LTO ядро быстрее? Ответ с бенчмарками есть по ссылке Squeezing More Performance Out Of The Linux Kernel With Clang + LTO
- Для кого подходит LTO Оптимизация ядра? В первую очередь это разработчикам мобильных устройств, которым очень важна производительность и быстрый отклик. Изначально LTO оптимизация появилась для ядра Linux мобильных устройств, но показала свою высокую эффективность и была перенесена на x86_64 . Поэтому LTO Оптимизация ядра Linux подходит всем, кому важна более высокая производительность и быстрый отклик от системы. Например сервера, которым важна скорость обработки и отдачи контента. За месяцы тестов не было выявлено ни одного побочного эффекта от применения LTO Оптимизации. Так же в статье LTO оптимизация ядра Linux был дан ответ почему всё работает хорошо и почему именно выбран clang+llvm .
- Несколько читателей хабра мне написали и попросили сделать репозиторий для моих измененных пакетов arch-packages. Один из них, поработал какое-то время с моими пакетами, и вышел с предложением разместить репозиторий у него на сервере. Так появился Arch Linux Club. Теперь все легко могут протестировать, как влияют измененные пакеты на производительность. Через какое-то время мой проект заметили разработчики одного Linux дистрибутива(форка Arch Linux), связались со мной и написали восторженные отзывы.
- В чем различие моих пакетов от официальных Arch Linux? Основное различие больше патчей и багфиксов. После того, как начал переделывать пакеты, был поражен, что майнтенейры не всегда понимают, что у них в сборочных скриптах, и часто забивают на исправления ошибок и совсем не читают багрепорты в апстриме. Например, не редко было, что некоторые программы у меня при работе крешились, а мейнтейнеры ничего не делали. В этом разработчики RedHat, Gentoo, Suse просто на две головы выше.
Это заставило меня ещё больше переделать пакетов и добавить патчи. Возможно мое начинание даже перейдет в свой дистрибутив. Основной упор в пакетах на безопасность и производительность где возможно включены -z,relro,-z,now и -fstack-protector-strong -fstack-clash-protection -fPIE . Подробнее что это даёт можно прочесть на сайте RedHat.
При подготовке статьи использовалась переписка разработчиков ядра Linux — Linux Kernel Mailing List.
Уважаемые читатели, спасибо за прочтение. Так как ваше мнение очень важно, вы можете оставить свои замечания по статье в комментариях. Тем самым вы поможете сделать контент для вас более качественным и интересным.

- linux
- linux kernel
- linux security
- безопасность
- информационная безопасность
- облачные технологии
- spectre
- meltdown
- ruvds_статьи
Cron — планировщик заданий в Linux

Системным администраторам и разработчикам часто приходится сталкиваться с периодическим выполнением скриптов и заданий. В Linux автоматическим выполнением задач по расписанию занимается cron.
Cron — это планировщик, который позволяет автоматически выполнять задачи по заданному расписанию от имени разных пользователей. Такие задачи называются Cron Jobs.
Каждая задача (скрипт) описывается одной строкой в файле crontab. Сначала указывается расписание, потом ссылка на скрипт. Шаблон задания выглядит так:
* * * * * /path/to/job.sh
Что можно понимать как:
[минуты] [часы] [день месяца] [месяц] [день недели] [абсолютный путь к файлу]
Более наглядно (можно скопировать):
# * * * * * /path/to/job.sh # | | | | | # | | | | +——— день недели (0-6), 0 — воскресенье # | | | +————— месяц (1-12) # | | +——————— день месяца (1-31) # | +————————— часы (0-23) # +——————————— минуты (0-59)
- * — звёздочка обозначает все значения
- , — разделитель значений
- — — диапазон значений
- / — чередование значений
Пять звёздочек — запуск скрипта каждую минуту каждого часа в каждый день месяца во все месяцы и дни недели. Т.е. раз в минуту. Допустимо указывать отдельные числа, диапазоны и несколько диапазонов через запятую. Можно чередовать значения. Например:
30 13 7-8 feb-apr,nov-dec * /path/to/job.sh
Скрипт будет выполняться:
- 7 февраля в 13:30
- 8 февраля в 13:30
- 7 марта в 13:30
- 8 марта в 13:30
- 7 апреля в 13:30
- 8 апреля в 13:30
- 7 ноября в 13:30
- 8 ноября в 13:30
- 7 декабря в 13:30
Полезные команды
man crontab
Список задач текущего пользователя:
crontab -l
Список задач выбранного пользователя:
crontab -u пользователь -l
Резервное копирование списка задач текущего пользователя в текстовый файл:
crontab -l > backup.txt
Восстановление задач из бэкапа в список задач текущего пользователя:
crontab backup.txt
Удаление задач текущего пользователя:
crontab -r
Редактирование задач текущего пользователя:
crontab -e
Если эта команда выполняется в первый раз, вам предложат выбрать редактор:
no crontab for sk - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nanoИзначально crontab-файл пустой:
Файлы crontab после их создания находятся здесь:
/var/spool/cron/crontabsПримеры задач
Выполнять скрипт каждую минуту:
* * * * * /path/to/job.shВыполнять скрипт раз в пятнадцать минут:
*/15 * * * * /path/to/job.shВыполнять скрипт каждый час в сорок минут:
40 * * * * /path/to/job.shВыполнять скрипт в семь утра:
0 7 * * * /path/to/job.shВыполнять скрипт в семь утра и семь вечера:
0 7,19 * * * /path/to/job.shВыполнять скрипт каждые два часа:
0 */2 * * * /path/to/job.shВыполнять скрипт в семь утра по понедельникам:
0 7 * * mon /path/to/job.shВыполнять скрипт в семь утра по будням:
0 7 * * 1-5 /path/to/job.shCуществуют готовые задания:
- @reboot — одиночное выполнение команды при загрузке
- @yearly — раз в год (аналог 0 0 1 1 *)
- @annually — тоже раз в год
- @monthly — раз в месяц (аналог 0 0 1 * *)
- @weekly — один раз в неделю (аналог 0 0 * * mon)
- @daily — раз в день (аналог 0 0 * * *)
- @midnight — тоже раз в день
- @hourly — раз в час (аналог 0 * * * *)
Crontab генератор
Если вам лень во всём этом разбираться, то воспользуйтесь онлайн генератором:

cron не работает, если в конце crontab нет перевода строки.
Теги
Похожие материалы
Установка VMware Tools на Ubuntu
Олег
- 9 февраля 2018
- Подробнее о Установка VMware Tools на Ubuntu

VMware Tools - бесплатный набор утилит для улучшения взаимодействия виртуальной машины и платформы VMware. В Интернете пишут про то, что от установки VMware Tools улучшается производительность виртуальной машины. В качестве примера указывают на то, что только в этом наборе утилит есть драйвера для сетевой карты vmxnet3. Не согласен, драйвера можно и отдельно поставить. В linux так и без этих драйверов сетевая карта работает нормально. А вот если у вас Windows Server - рекомендую vmxnet3, меньше глюков.
