запуск скрипта через cron при включении системы
запуск скрипта sh через crontab
Добрый день, понимаю конечно, что вопрос может и дебильный, но никак не могу решить задачу по запуску скрипта через крон.
И так задача: нужно запускать каждое воскресенье в 0.00 скрипт restart_squid.sh в crontab из под root добавил следующие:
на скрипт сделал chmod +x вручную скрипт запускается, но через крон не работает.
решил проверить работает ли вообще крон сделал следующие
Подскажите пожалуйста, в чем моя ошибка?
по идеи каждую минуту, должно ведь каждую минуту выводиться сообщение IT WORKS
Куда оно должно выводиться? Ну и не каждую минуту, а в первую минуту каждого часа.
я думал что должно выводиться на экран консоли или я ошибаюсь?
Что бы оно выводилось на экран консоли нужно вызывать команду в консоли или сделать перенаправление вывода в нужную консоль:
каждую минуту будет так */1, на счет выводится тоже ошибаешся сделай например для теста запись вывода в какой нибуть файл. И еще к исполняемым файла путь нужно указывать полный, смотреть с помощью which echo например. чтоб тебе легче біло можешь воспользоватся http://www.crontab-generator.org/
ну чтоб в какой либо работающий шел віводилось нужно смотреть с помощью w или who
И еще к исполняемым файла путь нужно указывать полный,
Необязательно, но лучше указать.
та да, я делаю так */1 чтоб себя не путать, как бы наглядно видно. Но тоже правильно. 🙂
ну чтоб в какой либо работающий шел віводилось нужно смотреть с помощью w или who
Чтобы в какой-либо «шел» выводилось нужно просто перенаправить вывод на соответствующий /dev/ttyN.
не обязательно это /dev/ttyN
Необязательно, но если говорить о консоли, то верно.
В данном случае «необязательно» является наречием.
не понял насчет «первой консоли» это как? сейчас вбил эту строчку получилось вот так
эффекта ноль, tty1 это рутовая консоль? а если консоль пользователя это будет tty2?
мне похер, я не русский, и русский не учил.
да нет необходимости, кому нужно и так поймет 🙂
В какой файл пишете правило для cron`а, в /etc/crontab или персональный файл пользователя?
в персональный, а лучше писать в /etc/crontab?
Читать текст написанный неграмотно неприятно, к тому же сразу складывается не особо лестное мнение о человеке, который хотя бы не старается писать более правильно.
Даже помогать такому человеку на форуме, если он при оформлении шапки темы совершает много грамматических ошибок, не ставит знаки препинания, путает банальное «ться» и «тся», неправильно склоняет и ещё кичится этим, не хочется.
так и писал, но ничего не происходит, даже не выводится it works в консоль
в персональный, а лучше писать в /etc/crontab?
Попробуйте, только там после интервалов запуска нужно указать имя пользователя. Ну и попробуйте указать полный путь даже просто до echo.
У тебя сам демон крона хоть запущен? Какой дистрибутив?
извините меня конечно, я скорей всего туплю, но я не понимаю о какой консоли идет через, я к машине через putty подключаюсь, потом логинюсь через аккаунт manage, далее пишут su и уже правлю кронтаб
Запуск PHP скрипта по расписанию cron. Когда не всё так ясно
В этой статье я расскажу о некоторых тонкостях запуска php-скриптов на хостингах, незнание которых может попортить немало нервов и начинающим программистам, и мастерам средней руки.
Причина написания статьи: проблемы с запуском скриптов на хостингах с разными настройками. А поскольку настройки могут быть разными, информация приводимая для общих случаев могут не подходить и приводить в заблуждения.
Немного теории по этим ссылкам: тут и тут, для тех хочет освежить память.
Случай первый
В настройках операционной системы не указаны пути по умолчанию. Как следствие следующая команда в cron не будет выполнена.
Правильной командой будет второй вариант, где мы пропишем полный путь до интерпретатора php.
Есть ещё несколько способов запуска php скрипта описанных здесь. Интересным будет здесь то, что php скрипт запускается как файл с командами для консоли и тут можно написать целую тучу команд и описать всевозможные варианты на любой вкус. Код выглядит так.
В команде для выполнения в cron прописывается путь к скрипту и только. В скрипте ставятся символы #!, а дальше просто пишем нужные нам команды на языке bash.
Случай второй
Выполнение скрипта при запросе из браузера приводит к выводу страницы в браузер. А при выполнении скрипта через cron приводит к выводу текста страницы в командную строку. Тут может быть несколько вариантов. Система может быть настроена на сохранение результатов вывода в консоль в виде файла. Причем файл этот может размешаться не в самом типичном месте. Постепенно это может забить всё пространство на диске. Часто под сайт дают место в 1 Гигабайт, 500 мегабайт. И даже встречались хостинги с 50 и 10 мегабайт под сайт.
Как вариант, вывод может быть перенаправлен на почтовый ящик, который заботливый хостер ненавязчиво подарил вам и прописал в настройках хостинга как email по умолчанию. При каждом выполнении скрипта весь текст, выводящийся в консоль, будет оформлен в письмо. Проблемы могут начаться неожиданно. Если задание cron выполняется часто, а у почты хостинга прописано ограничение на количество писем в день, почта просто ляжет (заблокируется провайдером как потенциальный спамер). И как неприятные последствия вы получите отказ в регистрации пользователей, уведомление пользователей и д.р., что подвязано на почту.
Решение старо как мир. Нужно сделать перенаправление вывода из консоли в пустоту. Делается это добавлением команды в конце команды крона.
Иногда админы хостинга берут на себя обязанность ненавязчиво поставить их за пользователя. Тут тоже может быть подводный камень.
Случай третий
Ситуация проста. Нужно отладить скрипт, запускаемый планировщиком. Можно попытаться сделать это средствами php, заставлять скрипт писать логии и т.п. Но есть способ куда проще, нужно перенаправить вывод в файл. Команда проста, дополнительный параметр к нашей команде:
Её надо добавить в конце команды:
Знак «>» указывает системе о перенаправлении вывода. Далее имя файла. В нашем случае указан абсолютный путь. Этот пример не составляет труда найти в интернете. Но тут нас может поджидать неприятность, вытекающая из второго случая. Заботливый хостер автоматически добавляет перенаправление вывода в конце нашей строки. И иногда маскирует это. В итоге получается команда вида:
В итоге вывод снова перенаправлен в пустоту и выходной файл будет пуст. Тут хостеру можно указать на его ошибку, что он уж слишком перехитрил с настройками. А можно сразу воспользоваться костылём. После команды перенаправления в файл закончить команду символами &&. Эти два символа используются в командной строке для объединения нескольких команд в одной строке. Они дают командной строке понять, что команда окончена и дальше идет следующая команда. К ней и применяется перенаправление в пустоту. В итоге и перенаправление в пустоту осталось и лог файл записан верно. Пример команды:
Случай четвёртый
Первое, что находишь в интернете по этой проблеме – совет прописать в кроне команду смены директории:
Но в каких-то случаях это не помогает. Выход есть. Один из них взять всё в свои руки и задать недостающее окружение для работы скрипта. Информации про это в интернете уже больше.
Иногда просто хватает вписать следующий код в начале скрипта и пути снова становятся рабочими.
Как видите, всё прописано функциями и утруждаться настройками не надо.
Настройка Cron
Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.
Как работает Cron?
В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.
Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становиться причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Примеры настройки cron
Далее, усложним, будем запускать каждый час, в нулевую минуту:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 12 ночи:
0 0 * * * /usr/local/bin/serve
Если идти так дальше, то можно запускать в первый день каждого месяца:
0 0 1 * * /usr/local/bin/serve
Можно в любой день, например, 15 числа:
0 0 15 * * /usr/local/bin/serve
В первый день недели первого месяца года, 0 часов 0 минут:
0 0 * 1 0 /usr/local/bin/serve
Или в нулевой день недели каждого месяца:
0 0 * * 0 /usr/local/bin/serve
Вы можете выбрать любую минуту, час и день недели, например, 15.30 во вторник:
30 15 * * 2 /usr/local/bin/serve
30 15 * * sun /usr/local/bin/serve
Для того чтобы указать определенный интервал нужно использовать символ «-«, например, каждый час, с семи утра до семи вечера:
0 7-19 * * * /usr/local/bin/serve
Если нужно запустить команду несколько раз, можно использовать разделитель «,». Например, запустим скрипт в 5 и 35 минут пятого (16:05 и 16:35), каждый день:
5,35 16 * * * /usr/local/bin/serve
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
sudo vi /etc/corn.daily/basckup
Скрипт должен выглядеть подобным образом. Теперь вы знаете как настроить cron, осталось проверить как все работает.
Отладка работы
После того как вы настроили правила, еще хотелось бы проверить работают ли они. Для этого ждем того времени, когда скрипт уже должен быть выполнен и смотрим лог cron. Иногда он находится в /var/log/cron, а иногда пишется в syslog. Например, у меня в crontab есть такая строка:
Она должна выполняться в 19.40 каждый день, теперь смотрим лог:
grep CRON /var/log/syslog
И видим что в нашем логе она действительно есть и выполняется целиком успешно. Если бы были какие-либо ошибки, то тут же было бы выведено сообщение.
Если нужно проверить скрипт, который находится в одной из специализированных папок, то тут еще проще, просто запустите run-paths, передав ей в параметр нужную папку или даже сам скрипт:
sudo run-paths /etc/cron.daily/
Дальше вы увидите весь вывод, включая вывод скрипта и сможете быстро понять в чем проблема.
Выводы
В этой статье мы рассмотрели как выполняется настройка cron для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.
Cron: настройка и запуск
Введение
Размещая сайт, мы желаем добиться бесперебойной работы без нашего участия.
Значит, требуется автоматизировать процессы, и тут на помощь приходит cron.
Crontab в панели управления Timeweb
Если ваш аккаунт оплачен, и вас не уличили в спам-рассылке, то раздел Crontab доступен и работоспособен:
Интерфейс Crontab в панели управления Timeweb дружелюбен и интуитивно понятен: даже начинающие пользователи, до этого не имевшие опыта работы с cron, легко разберутся в том, как создавать задачи. Создав задачу, вы сможете в автоматическом режиме делать бэкапы, рассылки, чистить кэш и выполнять другие типовые действия.
Crontab в панели управления Timeweb поможет любому пользователю автоматизировать свои задачи и достичь нужный ему результат.
После основной информации я расскажу о нюансах, которые важно учитывать при работе с cron.
В разделе Crontab создаются новые задачи. Для этого потребуется заполнить поля:
При необходимости указывайте один ящик администратора в разделе Crontab. На этот ящик будут приходить сообщения в том случае, если бы при запуске скрипта в консоли появилось бы сообщение.
Нюансы
Небольшие нюансы, о которых стоит помнить при работе с cron.
1. Cron работает, если аккаунт оплачен и нет ограничений.
Проверить статус можно создав файл с расширением php (например twtest.php) с кодом:
И обратившись к файлу в браузере.
В браузере увидите информацию:
2. Файл, который запускаете, должен иметь права на чтение и исполнение (r+x).
По умолчанию файлы на хостинге создаются с правами 600. Поменять права на нужные можно по ssh командой:
CRON по SSH
Настройка планировщика по ssh описана столько раз, что нового рассказать не получится.
Подключение по ssh подробно описано в справочном центре Timeweb:
После подключения, прочтите статью с информацией о командах ssh:
После прочтения надо найти файл со скриптом, перемещаясь между директориями командой cd. Найдя файл введите pwd и скопируйте путь (пример «/home/c/cc123456/public_html/test/»)
Если не знаете какие права у файла введите:
При подключении по ssh редактировать задачи можно командой
В первый раз сервер попросит выбрать редактор:
Система указывает на простой редактор nano под цифрой 2. Если не рассчитали силы или случайно выбрали vi, не пугайтесь, нажмите Esc, затем введите двоеточие q и нажмите enter.
Для того, чтобы сменить редактор, введите команду:
Задания пишутся по строкам. Пример:
Значения первых пяти значений:
Для каждого параметра возможно задать необходимое количество значений через запятую. Например, если в поле «часы» написать 8,23, то задание будет запущено в 8 часов утра и в 23 часа вечера. Можно задать интервал: 9-18 будет означать, что программа запустится каждый час в период с 9 до 18 часов включительно. Символ ‘*’ означает «все возможные значения». Например, указание ‘*’ в поле «часы» будет означать «запускать каждый час». Символ ‘/’ служит для указания дополнительной периодичности задания. Например, ‘*/3’ в поле «минуты» означает «каждые три минуты».
Далее указываем путь до интерпретатора. На серверах Timeweb по умолчанию установлена версия php 5.3. Наш предполагаемый скрипт работает на 5.6. Указать требуемую версию php так:
Последняя запись указывает на путь до файла и название файла, который запускаем.
Нюансы
Частные случаи
Для запуска задачи чаще, чем раз в минуту, используем sleep.
Для этого пишем в crontab:
для запуска файла каждые 30 секунд.
Иногда при использовании планировщика запуска программ cron неизвестно, сколько длится выполнение скрипта. Для избежания двойного запуска скрипта требуется проверка на завершение предыдущего запуска скрипта.
Логичным вариантом будет создание lock файла и при запуске скрипта проверять наличие файла. Но на хостинге Timeweb, как и на других хостингах, присутствует ограничение по процессору. Скрипт зависит от условий и времени выполнения, а значит, мы не можем предугадать время выполнения скрипта. Если скрипт выполнится с нарушением правил и ограничений ( https://timeweb.com/ru/services/hosting/rules/ ), то процесс завершится со стороны хостинга. Тогда lock файл не будет удален, а значит, и скрипт не будет запускаться по крону, пока файл не будет удалён.
Маэстро из отдела инженеров рассказал, как решить задачу.
Для начала создаём sh скрипт в файл /home/c/cc123456/tmp/twtest.sh:
В панели управления в разделе crontab выбираем тип «Исполняемый бинарный файл».
В поле “Полный путь” пишем:
Указываем необходимое время запуска и придумываем название.
Заключение
Теперь вы знаете, как работать с cron и автоматически запускать задачи. Более подробную информацию о cron ищите в «man cron». Удачи!
ИТ База знаний
Полезно
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Время планировать задачи
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Например, вы можете установить задание cron для автоматизации повторяющихся задач, таких как резервное копирование баз данных или данных, обновление системы последними обновлениями безопасности, проверка использования дискового пространства, отправка электронных писем, перезагрузка сервера и так далее. В некоторых приложениях, таких как Drupal или Magento, для выполнения определенных задач требуются задания cron.
Задания cron могут быть запланированы по минуте, часу, дню месяца, месяцу, дню недели или любой их комбинации.
Про Linux за 5 минут
Что такое файл Crontab
Crontab (таблица cron) представляет собой текстовый файл, который определяет расписание заданий cron. Существует два типа файлов crontab. Общесистемные файлы crontab и отдельные пользовательские файлы crontab.
/etc/crontab и файлы в каталоге /etc/cron.d являются общесистемными файлами crontab, которые могут редактировать только системные администраторы.
В большинстве дистрибутивов Linux вы также можете помещать скрипты в каталоги /etc/cron.
Синтаксис Crontab и операторы
Каждая строка в пользовательском файле crontab содержит шесть полей, разделенных пробелом, за которым следует команда для запуска.
Первые пять полей могут содержать одно или несколько значений, разделенных запятой или диапазон значений, разделенных дефисом.
Общесистемные файлы Crontab
Предопределенные макросы
Существует несколько специальных макросов расписания Cron, используемых для определения общих интервалов. Вы можете использовать эти ярлыки вместо указания даты в пять столбцов.
Команда Crontab
Команда crontab позволяет установить или открыть файл crontab для редактирования. Вы можете использовать команду crontab для просмотра, добавления, удаления или изменения заданий cron, используя следующие параметры:
Переменные Crontab
Демон cron автоматически устанавливает несколько переменных окружения.
Ограничения Crontab
Примеры Cron заданий
Ниже приведены некоторые примеры заданий cron, которые покажут вам, как запланировать выполнение задачи на разные периоды времени.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps