Редактирование записей cron от имени другого пользователя
2020/01/06/prostoy-sposob-planirovat-i-avtomatizirovat-zadachi-v-ubuntu/" title="управляет и планирует">управляет и планирует выполняющая команды на вашем компьютере. Впервые он был разработан в 1987 году Полом Викси и с тех пор стал бесценным инструментом в операционных системах на базе Linux как для администраторов, так и для пользователей.В настоящее время существует несколько реализации и переписывание cron , которые вы можете легко установить в свою систему Linux. Несмотря на различия, все эти программы имеют одну и ту же линию Vixie Cron.
По сути, цель этой статьи – предоставить базовый обзор того, как работает оригинальный Vixie cron, его синтаксис и как вы можете использовать его для планирования задач в вашей системе Linux.
Читайте также: Как легко создавать задания Cron в Linux с помощью Zeit
Как работает Cron?
Крону невероятно простая утилита UNIX . Он работает в двух частях. Cron сначала запускается как фоновый процесс, который запускается при первой загрузке системы.
Оттуда он каждую минуту считывает определенный файл. Этот файл содержит список команд, который, в свою очередь, состоит из временного кода и пути к файлу для каждого сценария или программы, которую вы хотите запустить.
Contents
Как работает Cron?
ron 03. Пример Crontab">Такой подход позволяет cron быть очень гибким в больших системах. Например, современные реализации cron, такие как Cronie, запускают только один экземпляр cron, даже если на этой машине работает несколько пользователей.
Cronie делает это возможным, предоставляя локальные файлы crontab для каждого пользователя, установленного в системе. Таким образом, cron нужно только знать, кому принадлежит crontab, уровень разрешений этого пользователя и команды внутри crontab.
Это не только делает систему более эффективной, но и более безопасной за счет уменьшения количества привилегированных программ, работающих в памяти.
Crontab: сердце Крона
Каждая реализация cron использует ту или иную форму кронтаб . Это простой текстовый файл, содержащий все команды, которые cron запустит для этого конкретного пользователя. Как описано выше, у каждого пользователя в системе есть свой собственный crontab. Они могут просмотреть, выполнив следующую команду:
crontab -l
Это выведет содержимое crontab текущего пользователя на стандартный вывод. Это может быть невероятно полезно, если вы просто хотите быстро увидеть, какие команды cron выполняет для этого пользователя.
Чтобы отредактировать его, вам нужно будет выполнить команду:
crontab -e
Это заставит cron запустить ваш текстовый редактор по умолчанию и загрузить в него файл crontab. Это позволит вам редактировать файл crontab.
Читайте также: Как использовать таймеры Systemd в качестве замены Cron
Синтаксис Crontab
Синтаксис файла crontab нев
Crontab: сердце Крона
том файле будет указывать соответствующую команду, которую необходимо выполнить для этого конкретного пользователя. Общая форма команды crontab выглядит примерно так:m h d mon dow [flags] command
Интервал времени — это поле из пяти цифр, в котором вы можете указать cron, как часто вы хотите запускать команду. Это основная функция любой реализации cron, которая позволяет вам быть точным и гибким в том, как cron обрабатывает повторяющиеся задачи.
- m = минуты от 0 до 59.
- ч = час от 0 до 23.
- d = день месяца от 1 до 31.
- пн = месяц от 1 до 12.
- dow = день недели от 0 до 6. Ноль — воскресенье.
Поле flags
представляет собой набор параметров, которые изменяют поведение cron для одной команды. Например, вы можете включить параметр -n
, чтобы запретить cron отправлять системную почту.
Поле command
— это команда cron, которая будет запускаться через заданные интервалы времени. Это может быть написанный вами сценарий оболочки или путь к программе с флагами.
Зная это, вы можете использовать все это вместе в одной строке crontab, чтобы создать определенные временные интервалы для ваших задач. Например, я могу запускать скрипт в своей системе Ubuntu каждое 24 июля в 2:30 ночи, написав следующую строку в crontab:
30 2 24 7 * /home/$USER/myscript.sh
Примечание. Рекомендуется запускать задание cron с «необычным» количеством минут (11, 27, 34 и т. д.), чтобы избежать дублирования разных заданий cron друг с другом.
Короткие коды
Crontab позволяет использовать короткие коды, чтобы облегчить чтение записей cron.
@reboot
– запуск один раз при запуске@yearly
– ЗапускаетсяСинтаксис Crontab
».>@annually
– то же, что @yearly@monthly
– Запускается раз в месяц, «0 0 1 * *»@weekly
– Запускаться раз в неделю, «0 0 * * 0»@daily
– Запускать один раз в день, «0 0 * * *»@midnight
– то же, что @daily@hourly
– Запускается раз в час, «0 * * * *»
Например:
@daily ramces /home/ramces/.scripts/file-backup.sh
Шорткод @reboot
позволяет создавать сценарии для запуска при запуске:
@reboot /home/ramces/.scripts/bootup.sh
Это может быть невероятно полезно, если вы хотите обеспечить выполнение команд сразу после включения компьютера.
Примечание. В зависимости от настроек вашей системы короткий код @reboot
может работать или не работать в вашей системе должным образом.
Системные таблицы Crontab
Еще одна замечательная особенность cron заключается в том, что он может управлять повторяющимися общесистемными задачами, а также создавать корневые файлы crontab. Это может быть невероятно полезно, если вы хотите автоматизировать обслуживание системы и обновления.
Чтобы создать корневой crontab, вам просто нужно использовать sudo
с командой или войти в свою учетную запись root:
sudo crontab -e
Системный crontab в основном имеет тот же формат, что и crontab пользователя. Однако одно ключевое различие между ними заключается в том, что корневая таблица crontab позволяет запускать команды от имени любого пользователя в системе:
m h d mon dow user [flags] "command"
Зная это, вы можете затем использовать это для создания повторяющихся команд как пользовательского, так и корневого уровня в одной и той же папке crontab:
30 2 * * sun root /bin/apt update 30 5 * * * ramces /home/ramces/.scripts/file-backup.sh
Таким образом я могу сохранить права доступа к моим файлам, а также иметь единое место, где я могу редактировать команды, которые хочу выполнить.
Читайте также: Зачем и как редактировать файл Sudoers в Linux
Короткие коды
й cron от имени другого пользователяЕсли вместо редактирования crontab от имени пользователя root вы хотите запланировать задание cron от имени другого пользователя, это также возможно с помощью флага -u
.
sudo crontab -u username -e
Например, чтобы запустить задание cron от имени пользователя «www-data», используйте следующую команду:
sudo crontab -u www-data -e
Читайте также: Как сохранить вывод терминала в файл в Linux
Просмотр активности cron
Хотя теперь вы настроены на запуск определенных команд или сценариев, вы можете убедиться, что они выполняются. В cron встроена функция: как только команда будет запущена, она отправит электронное письмо владельцу cron. Это можно изменить с помощью переменной «MAILTO».
При добавлении [email protected]
все отчеты о заданиях cron будут отправляться на указанный адрес электронной почты. Эту переменную обычно можно найти в самом верху экрана редактирования crontab. Однако если ее там нет, вы можете добавить переменную, и она будет работать как положено.
Несколько адресов электронной почты можно разделить запятой. Если вам нужна другая команда, отправленная по электронной почте в другое место, вы можете добавить команду MAILTO непосредственно над командой. Команды после этого mailto будут отправлены на новый адрес. Е
Системные таблицы Crontab
e>пустым, уведомления будут отправлены владельцу записи cron.Если вы не хотите получать какие-либо электронные письма, вы также можете проверить журналы cron. В большинстве систем для доступа к журналам cron потребуются права суперпользователя. Журнал cron можно найти в каталоге «/var/log». В файле cron или системного журнала будет отображаться журнал выполненных записей cron.
sudo grep crontab syslog
Часто задаваемые вопросы
Почему моя команда cron запускается каждую минуту, а не раз в час?
Это одна из самых распространенных ошибок при управлении crontab. По умолчанию добавление значения звездочки во временной код означает, что он будет выполняться для каждого экземпляра, возможного для этого значения. Например, значение 0 12 * * *
сообщит cron, что вы хотите запускать команду один раз в день до 12:00.
Однако большинство новичков часто пишут тот же тайм-код, что и * 12 * * *
. Написание таким образом будет означать, что команда будет выполняться раз в минуту с 12:00 до 12:59. Поэтому рекомендуется записывать 0 в поле минут, чтобы гарантировать, что команда выполняется только один раз.
Есть ли какие-либо другие параметры, которые я могу использовать с cron?
Помимо переменных -n
и MAILTO
, вы также можете использовать команду -s
, чтобы сообщить программе, что она должна быть строгой при выполнении команд. Использование этой опции заставит cron сосредоточиться только на текущей команде, пока она не завершится. Это может быть невероятно полезно, если ваша машина использует набор команд, которые необходимо выполнять в определенном порядке.
Вы также можете использовать переменную SHELL
, чтобы заставить cron использовать другую оболочку для своих команд. Например: SHELL=/bin/ksh
Изображение предоставлено: Unsplash