Чи знаєте ви, що Blade Runner встановлено в 2019 році? Це через три роки! Не кажучи вже про Back to the Future 2, де вони переміщуються в часі на 2015 рік. Але у нас немає літаючих автомобілів, і серед нас немає реплікантів (наскільки я знаю).
- Розблокуйте «Шпаргалку за основними командами Linux» зараз!
- Що таке Крон?
- Що таке Crontab?
- Як скласти розклад завдань за допомогою Cron
- Як перевірити, чи виконуються завдання Cron
- Що робити, якщо Cron не працює?
- Службу cron запущено?
- Вам навіть дозволено мати файл crontab?
- Ваші змінні встановлені правильно?
- Ваш crontab форматується?
- Ви дійсно повинні використовувати термінал?
- Чи є альтернативи Cron?
- А що щодо тебе? Як ви організуєте свої цифрові завдання? Які завдання ви плануєте на Linux? Поділіться своїми історіями та порадами щодо використання cron у коментарях.
Розблокуйте «Шпаргалку за основними командами Linux» зараз!
Це підпише вас на нашу розсилку
Введіть адресу електронної пошти
[] [] [] [] розблокування
Прочитайте нашу політику конфіденційності
Легко відчувати розчарування у зв'язку з сучасними технологіями, коли ми порівнюємо їх з вигаданими зображеннями майбутнього. Тим не менш, в наші дні наші телефони, комп'ютери і навіть вдома можуть робити дивовижні речі. Здатність автоматизувати завдання є одним з них.
Кожен користувач Linux може отримати вигоду від планування завдань, незалежно від того, чи пов'язані вони з системою (наприклад, очищення старих журналів і оновлення пакетів) або обслуговування користувача (перевірка електронної пошти, завантаження подкастів...). Користувачі Windows мали планувальник завдань з Windows 95. Утиліта, яка виконує ту ж роботу в Linux, називається cron, і тут ми пояснимо, як її використовувати.
Що таке Крон?
Cron - це системна служба, яка працює в фоновому режимі, перевіряє заплановані завдання і виконує їх, якщо виявить. Завдання, також звані "завданнями cron" "- визначені в спеціальних конфігураційних файлах (crontabs), які cron сканує кожну хвилину. Декілька версій cron можна знайти в різних дистрибутивах Linux. Наприклад, форка cron в Fedora називається cronie, і є також fcron, bcron і dcron. У деяких є додаткові функції, в той час як інші більше зосереджені на безпеці, але всі вони засновані на одній і тій же ідеї.
Це керівництво написано для vixie-cron, найпоширенішої версії cron, яку ви знайдете в Ubuntu і її похідних. Хоча більшість інструкцій застосовні і до інших реалізацій cron, можуть бути невеликі відмінності, тому перевірте їх керівництва, якщо ви вирішите переключитися.
Що таке Crontab?
Якщо ви серйозно ставитеся до управління своїм часом, можливо, у вас є якийсь календар. - додаток або хоча б аркуш паперу. Crontab дуже схожий на календар вашого комп'ютера. Він містить інформацію про заплановані завдання, повідомляючи cron, які команди запускати і в який час.
Насправді, у вашій системі є кілька crontabs. У кожного користувача є свій crontab, включаючи root (адміністратор). Власні crontabs зберігаються у/var/spool/cron/crontabs/. Команда crontab -l виводить список файлів crontab для поточного користувача. Ви можете перевірити кореневий crontab за допомогою sudo crontab -l.
Крім того, існує системний файл crontab/etc/crontab, який використовується для спільних завдань. Зазвичай вони приймають форму виконуваних скриптів, що належать користувачеві root, які/etc/cron.monthly/папках/etc/cron.hourly/,/etc/cron.daily/,/etc/cron.weekly/і/etc/cron.monthly/, і в деяких дистрибутивах також папка/etc/crond/. Взагалі кажучи, вам не потрібно мати справу з цими завданнями, оскільки більшість з них створюються автоматично встановленими додатками.
Як скласти розклад завдань за допомогою Cron
Звучить просто: для планування завдань просто додайте їх до свого crontab. Оскільки crontab - це спеціальний файл налаштувань, редагувати його вручну не рекомендується. Замість цього використовуйте команду crontab -e. Щоб редагувати crontabs root або інших користувачів, запустіть команду з правами адміністратора і додайте їх ім'я користувача після опції -u:
sudo crontab -u root -e
sudo crontab -u username -e
Файл crontab складається з двох розділів. Перший містить змінні середовища, які встановлюються автоматично. Ви можете безпечно змінювати змінні PATH, HOME і SHELL і змінювати змінну MAIL.
Друга частина файлу - це фактичний «розклад» з вашими запланованими завданнями. Кожне завдання займає рядок (рядок) у таблиці зі стовпчиками, що представляють такі значення:
Щоб успішно планувати завдання, вам потрібно трохи дізнатися про синтаксис crontab:
- Числа повинні бути цілими числами (цілими числами), і ви можете використовувати зірочку (*) в будь-якому зі стовпчиків як підстановковий знак, що означає «кожну хвилину/день/місяць»....
- У стовпчику «День місяця» намагайтеся не встановлювати дату, яка не зустрічається в місяці, зазначеному в стовпчику «Місяць» (наприклад, 30 лютого).
- Стовпчики «Місяць» і «День тижня» приймають короткі імена для місяців і днів відповідно і нечутливі до регістру.
- У стовпчику «День тижня» 0 і 7 позначають неділю. У стовпчику «Година» потрібен формат «воєнний час» (24 години), але ви не можете використовувати число 24 - замість цього 0 означає 12:00. Це відбувається тому, що значення хвилин, годин і дня тижня починаються з 0 замість 1.
- Секунди не підтримуються, тому ви не можете запланувати завдання на певну секунду.
Що ви можете зробити, так це запланувати інтервали часу з використанням дефісу (14-22 в розділі «Годинник» будуть запускати завдання безперервно з 14:00 до 22:00) або запустити одне завдання декілька разів, визначивши список через ком (1, 3,5 в «День тижня» буде запускати завдання в понеділок, середу і п'ятницю).
Між тим, значення кроку представлені косою рисою (/), і вони вказують кількість пропусків в межах діапазону; наприклад, 3-20/3 у розділі «Годинник» буде запускати завдання кожні три години з 3:00 до 20:00. Це корисно, якщо ви хочете повторювати завдання кожні X годин, оскільки ви можете об'єднати зірочку і крок (*/ІКС). Ви можете комбінувати діапазони зі списками і кроки з діапазонами, якщо ви використовуєте числа. Іншими словами, такі комбінації, як «джан-мар» або «вт, пт-вс» не допускаються.
Як альтернативу, замість встановлення значення для кожного стовпчика, ви можете просто написати @ weekly, @ yearly, @ monthly, @ daily або @ hourly на початку рядка, а потім команду. Заплановані так завдання будуть запускатися при першій можливості, тому @ weekly буде виконуватися опівночі першого дня тижня. Якщо ви бажаєте запустити завдання відразу після запуску системи (re), скористайтеся командою @ reboot.
У цьому прикладі ми запланували резервне копіювання щодня на 08:20 і 20:20. Шпалери змінюються автоматично кожні три дні в 19:00, і скрипт перевіряє наявність нових подкастів щопонеділка о 10:20 і 20:20. Нагадування про день народження призначено на 25 березня і виконується кожні 30 хвилин протягом зазначеного періоду часу. Нарешті, скрипт перевіряє електронну пошту кожні 15 хвилин з 8 до 20, але тільки в робочі дні. Ви можете вільно організувати свій crontab з пробілами і табуляціями між стовпчиками, але не всередині них (не ставте пробіли між комами, дефісами і косою рисою).
Якщо все це звучить занадто складно, не хвилюйтеся - ви завжди можете покластися на Інтернет. Такі інструменти, як Crontab Generator, Crontab.guru і Corntab, допоможуть вам створювати завдання cron, не знаючи синтаксису crontab. Вони показують, коли завдання буде виконано наступним, і надають шаблони для часто використовуваних виразів. Crontab.guru - найкращий з усіх, тому що він дозволяє вам протестувати синтаксис crontab в режимі реального часу, щоб ви могли відразу побачити, як ваші зміни вплинуть на розклад.
Як перевірити, чи виконуються завдання Cron
Передбачається, що Cron працює тихо в фоновому режимі і дозволяє вам працювати без перешкод, поки він виконує ваші завдання. Але як ви можете переконатися, що це насправді працює?
Cron має вбудовану функцію повідомлень електронною поштою, але для цього потрібно налаштувати хоча б простий локальний поштовий сервер. поштовий сервер Не багато домашніх користувачів бажають налаштувати це, і не багато дистрибутивів надають його за замовчуванням (наприклад, Ubuntu цього не робить). Найшвидший спосіб перевірити cron - це переглянути системний журнал за допомогою цієї команди:
cat /var/log/syslog | grep -i cron
Опція -i робить наш запит нечутливим до регістру. Можливо, що у cron буде свій власний файл журналу де-небудь в/var/log/, тому подивіться, чи не зможе ця команда дати корисні результати.
Якщо вам потрібно зберегти вивід певного завдання cron, ви можете перенаправити його до файла. Вкажіть шлях і назву файла в останньому стовпчику вашого crontab після команди, яку ви бажаєте виконати:
30 * * * * /usr/bin/yourcommand > /home/username/logfile.txt
Використання одного символу > перезапише файл під час кожного запуску команди. Щоб уникнути цього, скористайтеся > > замість цього, щоб додати вивід до існуючого файлу.
Що робити, якщо Cron не працює?
Може статися так, що ви додали деякі завдання, перевірили системні журнали і виявили, що вони не виконуються належним чином. Ось деякі речі, які ви повинні враховувати - і бути обережними - при спробі вирішити проблему.
Службу cron запущено?
Як ви знаєте, фонова служба cron має працювати у фоновому режимі. Переконайтеся, що це дійсно так. Сервіс називається crond або просто cron.
Для дистрибутивів systemd:
systemctl status cron
Для дистрибутивів Upstart:
service cron status
Якщо ваш дистрибутив використовує «старий» підхід System V init, перелічте всі сервіси з:
initctl list
і подивіться, чи є в списку cron.
Вам навіть дозволено мати файл crontab?
Перевірте теку/etc наявність файлів з іменами cron.allow і cron.deny. У Ubuntu жоден з них не повинен існувати, що означає, що всім користувачам дозволено керувати завданнями cron. Однак, якщо є файл cron.allow, він повинен містити ваше ім'я користувача. І навпаки, якщо файл cron.deny існує, ваше ім'я користувача не повинно бути в нім. Якщо залишити файл cron.deny порожнім, це означає, що тільки файли root і користувачі, перераховані в cron.allow можуть мати файли crontab.
Ваші змінні встановлені правильно?
Crontab автоматично встановлює змінну SHELL до/bin/sh. Тим не менш, якщо ви вибираєте оболонку fish або bash, ви повинні змінити змінну SHELL, Аналогічно, змінна PATH за замовчуванням містить лише кілька каталогів. Саме тут crontab шукає команди Linux. Якщо ваша задача cron не запускається, це може бути тому, що crontab не «бачить» команду, яку ви використовували. Щоб уникнути цього, додайте каталоги, які містять команди, до змінної PATH, розділені двокрапками:PA
TH=/opt/myapp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Якщо ви не хочете редагувати це у crontab, ви можете визначити ці змінні в скрипті, який ви хочете запустити як завдання cron.
Ваш crontab форматується?
Синтаксис Crontab не зовсім гладко. Навіть якщо ви підтвердите це за допомогою онлайн-інструментів, згаданих раніше, невелика помилка може перешкодити cron виконувати ваші завдання. Будьте обережні з:
- додати порожній рядок наприкінці файла crontab
- екрануйте знак% зворотною рисою, якщо ваша команда включає його
- писати коментарі у вигляді окремих рядків, що починаються з #. Не пишіть коментарі в тому ж рядку, що і змінні оточення, або поруч з командами завдання cron.
Ви дійсно повинні використовувати термінал?
Точно ні. Користувачі KDE можуть планувати завдання cron за допомогою KCron, який доступний з додатка «Параметри системи» > «Планувальник завдань». З простим інтерфейсом, який дозволяє вам вибирати і налаштовувати все лише кількома клацаннями миші, KCron дуже приємний у використанні.
Якщо ви віддаєте перевагу GNOME, то розклад GNOME для вас. Підхід аналогічний, хоча інтерфейс, як очікується, трохи відрізняється. Він пропонує розширений режим для дрібнозернистих змін і поставляється з апплетом панелі, з якого ви можете безпосередньо керувати завданнями.
Ви повинні знати про інші рішення, такі як Crontab-UI і Minicron. Вони більше підходять для користувачів, які керують кількома машинами і завданнями cron, і однією з їх найкрутіших функцій є веб-інтерфейс.
Чи є альтернативи Cron?
У той час як cron є значною мірою стандартним планувальником завдань для Linux., це, звичайно, не єдиний. Команда at ідеально підходить для швидких одноразових завдань, які можна запланувати прямо з командного рядка, без спеціальних файлів конфігурації. Якщо вам потрібно більше, є GNUbatch, який вводить поняття залежності. За допомогою GNUbatch ви можете встановити конкретні умови для кожного завдання або зробити заплановане завдання залежним від попереднього. Щось подібне можна досягти за допомогою системних таймерів. Хоча таймери systemd менш зручні в налаштуванні, ніж cron, системні пристрої можуть пам'ятати, чи пропустила завдання свій розклад, коли комп'ютер був вимкнений, і запускати його при наступному включенні.
Це те, що cron не може зробити поодинці. Таким чином, він підходить для серверів і комп'ютерів, які постійно працюють, але він не буде виконувати роботу, яка була запланована, коли комп'ютер був вимкнений. Це де анакрон вступає в гру. Технічно це не «альтернатива» або заміна cron. Замість цього anacron доповнює cron і повинен використовуватися разом з ним, що має місце в багатьох дистрибутивах Linux, включаючи продукти на основі Ubuntu і Ubuntu. Anacron реєструє час останнього виконання завдання і перевіряє наявність пропущених екземплярів при вимкненні системи. Він буде запускати їх при включенні комп'ютера, але кожну задачу можна виконувати тільки один раз на день.
Деякі версії cron, такі як fcron, за замовчуванням пропонують функції anacron. Досвідчені користувачі, можливо, захочуть поглянути на Hcron або SuperCron, які вносять безліч поліпшень в базові функції cron, але в той же час є складними в управлінні.








