Linux cron запуск каждый час

cron

cron – программа-демон, предназначенная для выполнения заданий в определенное время, или через определенные промежутки времени. Для редактирования заданий используется утилита crontab .

Листинг

Нельзя изменять файл расписания, просто открыв его в текстовом редакторе. Для его редактирования необходимо использовать команду crontab -e .

Простой пример файла расписания. Создание снимка экрана каждый час:

SHELL=/bin/bash MAILTO=username 0 * * * * scrot

Основные настройки

Выбор среды для исполняемых задач:

Имя пользователя, которому будет послано сообщение о выполнении задания:

Вместо имени, также можно использовать электронный адрес:

Не обязательные настройки

Задаем каталог пользователя:

Задаем каталоги исполняемых фалов:

Прописываем дисплей, если запускаемый по крону скрипт должен использовать графику:

Выбор времени выполнения задания

Время запуска представляется в таком виде:

минута час день_месяца месяц день_недели команда
Значение Диапазон Дополнительно
минуты 0-59
часы 0-23
дни месяца 1-31
месяцы 1-12 можно задавать и в 3-х буквенном варианте
дни недели 0-6 можно задавать и в 3-х буквенном варианте (0=воскресенье)

Символ ‘*’ подразумевает — любое значение.

Минимальное время 1-а минута. Это связано с тем что cron каждую минуту просматривает список заданий, и ищет которые нужно выполнить.

Дни недели и месяца в трех буквенном варианте:
sun mon tue wed thu fri sat
jan feb mar apr may jun jul aug sep oct nov dec

Дополнительные переменные cron

Переменная Описание Эквивалент
@reboot Запуск при загрузке
@yearly Раз в год 0 0 1 1 *
@annually Тоже что и @yearly
@monthly Раз в месяц 0 0 1 * *
@weekly Раз в неделю 0 0 * * 0
@daily Раз в день 0 0 * * *
@midnight В полночь (00:00)
@hourly Каждый час 0 * * * *

Управление при помощи crontab

Добавление файла расписания:

crontab имя_файла_расписания

Вывести содержимое текущего файла расписания:

Удаление текущего файла расписания:

Редактирование текущего файла расписания (при первом запуске будет выведен список поддерживаемых текстовых редакторов):

Этот ключ позволяет выполнять вышеописанные действия для конкретного пользователя:

Учтите, что -u можно воспользоваться только запуская crontab от лица суперпользователя.

Примеры

Каждый час, с использованием переменных cron:

Каждый день в 03:15 запускать скрипт:

Тоже что и выше, но расписанное полностью:

:-D

Новый год :

Каждый будний день в 22:00:

Читайте также:  Linux dev usb device

Запуск программы с графической оболочкой ( GUI ); каждую минуту будет отображаться сообщение с текстом «It work!»:

0-59 * * * * DISPLAY=:0 gdialog --msgbox "It work\!" 25 20 > /dev/null

* где DISPLAY=:0 — номер монитора

GUI версии

GTK+

Есть очень полезная программа: Scheduled tasks(gnome-schedule). Она представляет собой графический интерфейс для cron, и будет полезна новичкам, так как понятным языком описывает время выполнения задачи. К примеру:

каждую минуту, между 00:00 и 00:59.

KDE

Для KDE существует Task Scheduler, который встраивается в окно настройки системы.

Источник

НАСТРОЙКА CRON

Cron — один из часто используемых инструментов для Unix-систем. Его используют для планирования выполнения команд на определённое время. Эти «отложенные» команды или задания принято называть «Cron Jobs». Такой инструмент отлично подходит для регулярных бэкапов, мониторинга дискового пространства, удаления файлов (например, логов) и много чего ещё. В этой статье будет рассказано о работе с Cron на Linux.

Базовая настройка CRON

Шаблон задания для Cron выглядит примерно так:

Минуты(0-59) Часы(0-24) День(1-31) Месяц(1-12) День недели(0-6) Команда

Вот иллюстрация этого же шаблона, которую можно сохранить себе:

Screenshot_10.png

минута час день месяц день_недели /путь/к/исполняемому/файлу

Звёздочками обозначены конкретные блоки времени.

Для отображения содержимого crontab-файла текущего пользователя используйте команду:

Для редактирования заданий пользователя есть команда:

$ crontab -e Чтобы изменить crontab-файл другого пользователя (например, bitrix): 

Ниже приведены несколько примеров cron-заданий:

    Чтобы выполнять команду каждую минуту, задание должно быть такое:

Ещё существуют готовые задания:

@reboot Запускать при начальной загрузке @yearly Заменяет "0 0 1 1 *" т.е. "ежегодно в 00:00 1 января" @annually Тоже что и yearly @monthly Заменяет "0 0 1 * *" т.е. "ежемесячно в 00:00 1 числа" @weekly Заменяет "0 0 * * 0" т.е. "еженедельно в 00:00 воскресенье @daily Заменяет "0 0 * * *" т.е. "ежедневно в 00:00" @midnight Тоже что и daily @hourly Заменяет "0 * * * *" т.е. "ежечасно в 00 минут"

Чтобы выполнять команду каждый раз после перезапуска сервера, используйте это задание:

Команда для очистки всех заданий текущего пользователя:

Настройка cron для web программистов

1. Добавляем в cron задачу, которая будет выполнятся каждую минуту.
Набираем crontab -e и добавляем (будет выполняться под тем пользователем под кем вы зашли в SSH)

*/1 * * * * /usr/bin/php -q /server/cron/cron.php > /dev/null 2>&1

сохраняемся (SHIFT+Z 2раза )
Примечаие:
*/1 * * * * — означает что скрипт будет запускаться каждую минуту
> /dev/null — означает отправку результатов, которые выдаст скрипт, в никуда.
2>&1 — избавляет администратора сервера от писем, если скрипт закончит работу с ошибками

Читайте также:  Ubuntu linux помощь в установке

2. для отправки на почту воспользуемся mutt (почтовый клиент)
2.1. apt-get install mutt
2.2. Набираем crontab -e и добавляем
0 */1 * * * /usr/bin/php -q /server/cron/cron.php > /server/cron/cron.txt && mutt my@email.com -s cron-result < /server/cron/cron.txt
сохраняемся (SHIFT+Z 2раза)
Примечаие:
добавляем в cron задачу, которая будет выполнятся каждый час (в ноль минут), сохранит результат выполнения скрипта в файл и отправит его на почту с темой cron-result (в нашем случае в теле письма, но можно и приложением).

3. Иногда надо запускать по cron скрипт который лежит уже на сайте (и использует окружение сайта)
*/5 * * * * /usr/bin/wget —no-check-certificate -O /dev/null https://www.linuxshop.ru/cronit.php
Примечаие:
1. wget — как бы выкачивает скрипт (что нам и нужно веб сервер его исполняет)
2. —no-check-certificate не проверять сертификат https
3. -O /dev/null — не сохранять выкаченный фаил.

Настройка cron для системных администраторов

Фактически, Cron — это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab (тут могут быть тоже прописаны задачи) и они не будут отображаться по команде crontab – l

Так же существует anacron (anachronistic cron или асинхронный (анахроничный) cron) и его запуск и его задания тоже нужно учитывать, см. файл /etc/anacrontab и каталоги /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.monthly/ и /etc/cron.weekly/

Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:

§ /etc/cron.minutely — каждую минуту;

§ /etc/cron.hourly — каждый час; ( cat /etc/cron.d/0hourly — тут настроен)

§ /etc/cron.daily — каждый день;

§ /etc/cron.weekly — каждую неделю;

§ /etc/cron.monthly — каждый месяц.

Список всех задач cron у всех пользователей в Linux

К сожалению для системного администратора нет такого инструмента, т.к задачи могут храниться в 8х местах

1. /etc/crontab (можно посмотреть глазами cat /etc/crontab)

2. Клиентский crontab ( crontab -u user -l)

3. /etc/anacrontab (можно посмотреть глазами cat /etc/anacrontab)

4. /etc/cron.d/ (Кроме того, cron считывает файлы в каталоге /etc/cron.d/)

5. /etc/cron.daily/ Запуск всех скриптов один раз в день

6. /etc/cron.hourly/ Запуск всех скриптов один раз в час

7. /etc/cron.monthly/ Запуск всех скриптов один раз в месяц

8. /etc/cron.weekly/ Запуск всех скриптов один раз в неделю

Для того чтобы пройти руками все клиентские Клиентский crontab ( crontab -u user -l), можно автоматизировать для всех пользователей очевидно нужно взять список пользователей в системе из /etc/passwd и сделать для каждого пользователя crontab -u USERNAME -l, то есть:

Читайте также:  Linux debian установка даты
for user in $( cut -d ‘:’ -f1 /etc/ passwd ); do crontab -u $user -l; done

Недостаток этого решения очевиден:
1. Нужно всегда помнить эту команду.
2. Если у пользователя нет задач в планировщике то мы получим сообщение «no crontab for vasua» и таких сообщений может быть десятки если у вас много пользователей — это неудобно.
3. Вывод информации неудобно читать.

Решение простое — создадим функцию allcrontab в файле ~/.bashrc для ввода информации в более удобном виде:

# Определим цвета вывода

red= ‘\e[0;31m’

RED= ‘\e[1;31m’

green= ‘\e[0;32m’

GREEN= ‘\e[1;32m’

NC= ‘\e[0m’
# Определим нашу функцию вывода списка всех задач cron у всех пользователей

function allcrontab()

for user in $( cut -d ‘:’ -f1 /etc/ passwd ); do

usercrontab=$( crontab -l -u $ 2>/dev/null)

if [ -n «$» ]; then

echo -e «$====== Start crontab for user $$$$ $======$»

crontab -l -u $ | sed ‘/ *#/d; /^ *$/d’

echo -e «$====== End crontab for user $$$$ $========$\n»

fi

done

>

Выполняем source ~/.bashrc или перелогиниваемся и выполняем в консоле allcrontab и видим красивый вывод списка всех задач cron у всех пользователей:

Но это не финишная прямая, а только начало, ведь опытный системный администратор знает, что кроме вывода списка заданий командой crontab -l -u USER есть еще задания планировщика в каталоге /etc/cron.d/ и это тоже нужно учитывать, потому что например панель хостинга ISPConfig сохраняет задания cron в каталоге /etc/cron.d/ с именами ispc_webXXX, где webXXX — это логин системного пользователя, например web30 и вывод crontab -l -u web30 нам скажет «no crontab for web30», а на самом деле в файле /etc/cron.d/ispc_web30 может быть такая картина:

SHELL= ‘/bin/sh’
*/2 * * * * web30 /usr/bin/php -f /var/www/mysite.ru/web/yii cron -origin/index

ОТЛАДКА РАБОТЫ cron

После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Обычно он находится в /var/log/cron

Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:

sudo run-paths /etc/cron.daily/

Источник

Оцените статью
Adblock
detector