Cron перезагрузка роутера раз в сутки
Системным администраторам, да и обычным пользователям часто приходится автоматизировать различные задачи по обслуживанию и работе с Linux с помощью скриптов. Это очень удобно, вы просто запускаете скрипт, и он делает все что необходимо без вашего вмешательства. Следующий шаг в этом пути - настроить автоматически запуск нужного скрипта в нужное время.
Именно для этих задач в Linux используется системный сервис cron. Это планировщик, который позволяет выполнять нужные вам скрипты раз в час, раз в день, неделю или месяц, а также в любое заданное вами время или через любой интервал. Программа часто используется даже другими службами операционной системы. В этой статье мы рассмотрим как выполняется настройка Cron и разберем основные часто используемые примеры.
Как работает Cron?
Фактически, Cron - это сервис, как и большинство других сервисов Linux, он запускается при старте системы и работает в фоновом режиме. Его основная задача выполнять нужные процессы в нужное время. Существует несколько конфигурационных файлов, из которых он берет информацию о том что и когда нужно выполнять. Сервис открывает файл /etc/crontab, в котором указаны все нужные данные. Часто, в современных дистрибутивах там прописан запуск утилиты run-parts, которая запускает нужные скрипты из следующих папок:
- /etc/cron.minutely - каждую минуту;
- /etc/cron.hourly - каждый час;
- /etc/cron.daily - каждый день;
- /etc/cron.weekly - каждую неделю;
- /etc/cron.monthly - каждый месяц.
В этих папках должны находиться скрипты, которые нужно выполнять с указанным интервалом. Скрипты должны иметь права на выполнение и их имя не должно содержать точки. Это очень сильно облегчает работу с планировщиком для новых пользователей. Также в файле crontab прописан запуск команды anacron, которая работает так же как и cron, только предназначена для задач, которые нужно выполнять раз в длительный период, например, раз в день, неделю, месяц, год.
Она позволяет выполнять их даже если компьютер работает не всегда и время от времени выключается. Дата выполнения задания последний раз записывается в файл /var/spool/anacron, а затем, при следующем запуске anacron проверяет был ли запущен нужный процесс в нужное время, и если нет, то запускает его. Сам же сервис cron больше рассчитан на выполнение задач в течение дня или с точно расписанным временем и датой.
Настройка Cron
Для настройки времени, даты и интервала когда нужно выполнять задание используется специальный синтаксис файла cron и специальная команда. Конечно, вы всегда можете отредактировать файл /etc/crontab, но этого делать не рекомендуется. Вместо этого, есть команда crontab:
Ее всегда желательно выполнять с опцией -e, тогда для редактирования правил будет использован ваш текстовый редактор по умолчанию. Команда открывает вам временный файл, в котором уже представлены все текущие правила cron и вы можете добавить новые. После завершения работы команды cron файл будет обработан и все правила будут добавлены в /var/spool/cron/crontabs/имя_пользователя причем добавленные процессы будут запускаться именно от того пользователя, от которого вы их добавляли.
Поэтому тут нужно быть аккуратным, и если вам нужно выполнять скрипты от рута, то и crontab нужно выполнить от рута, а не от пользователя. Это часто становится причиной проблем.
Синтаксис crontab
Как я уже говорил, время задается особым синтаксисом, давайте рассмотрим синтаксис настройки одной задачи cron:
минута час день месяц день_недели /путь/к/исполняемому/файлу
Нужно сказать, что обязательно нужно писать полный путь к команде, потому что для команд, запускаемых от имени cron переменная среды PATH будет отличаться, и сервис просто не сможет найти вашу команду. Это вторая самая распространенная причина проблем с Cron. Дата и время указываются с помощью цифр или символа '*'. Этот символ означает, что нужно выполнять каждый раз, если в первом поле - то каждую минуту и так далее. Ну а теперь перейдем к примерам.
Примеры настройки cron
Сначала можно посмотреть задачи cron для суперпользователя, для этого можно воспользоваться опцией -l:
Вы можете удалить все существующие задачи командой -r:
Давайте предположим, что нам нужно запускать от имени суперпользователя наш скрипт по адресу /usr/local/bin/serve. Какой-нибудь обслуживающий скрипт. Самый простой пример - запускать его каждую минуту:
Далее, усложним, будем запускать каждый час, в нулевую минуту:
Запускаем в нулевую минуту нулевого часа, каждый день, это в 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
Понедельник считается первым днем, воскресенье - это седьмой или нулевой день. Еще можно писать сокращенное название дня недели, например sun - воскресенье:
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
Вы можете захотеть не указывать отдельно время, а просто указать интервал, с которым нужно запускать скрипт, например, раз в 10 минут. Для этого используется разделитель косая черта - "/":
Кроме того, для некоторых часто используемых наборов были придуманы переменные, вот они:
- @reboot - при загрузке, только один раз;
- @yearly, @annually - раз год;
- @monthly - раз в месяц;
- @weekly - раз в неделю;
- @daily, @midnight - каждый день;
- @hourly - каждый час.
Например, вот так просто будет выглядеть команда запуска скрипта раз в час:
Если же вы собрались добавить скрипт в одну из папок, то, как я уже говорил, нужно чтобы его имя было без точек и у него были права на выполнение:
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 для удобного планирования автоматических задач. Надеюсь, эта информация была полезной для вас.
Синтаксис Crontab
Crontab имеет шесть полей. 1-5 поля определяют дату и время исполнения. 6 поле используется для команды/скрипта. Синтаксис выглядит следующим образом:
Как изменить расписание
Чтобы добавить или обновить задания в crontab, используйте команду ниже. Откроется текстовый файл с заданиями crontab, где их можно будет редактировать.
По умолчанию откроются задачи текущего пользователя. Для редактирования задач другого пользователя используйте команду:
Как узнать список заданий Crontab
Для просмотра записей crontab текущего пользователя используйте команду:
Чтобы посмотреть список заданий другого пользователя, используйте -u:
Примеры
1. Ежедневно в 2 часа ночи.
Это будет полезно для ежедневного резервного копирования.
2. Дважды в день
Команда ниже будет выполняться в 5 утра и 5 вечера ежедневно.
3. Каждую минуту
4. Каждое воскресенье в 17:00
Пригодится для планирования еженедельных задач.
5. Каждые 10 минут
Если вы хотите запустить скрипт с интервалом в 10 минут, вы можете настроить его, как показано ниже. Может быть полезно для мониторинга.
6. Определенные месяцы
Иногда может понадобиться запланировать задачи только на некоторые месяцы. Ниже приведен пример скрипта, который будет запущен в январе, мае и августе.
7. Определенные дни
Если вам необходимо составить расписание выполнения задачи только на некоторые дни. Приведенный ниже пример будет выполняться каждое воскресенье и пятницу в 17:00.
8. Первое воскресенье каждого месяца.
Запланировать выполнение сценария только в первое воскресенье невозможно по параметру времени, но мы можем использовать условие в полях команд, чтобы сделать это.
9. Каждые четыре часа.
Если вы хотите запустить скрипт с интервалом в 4 часа:
10. Дважды в каждое воскресенье и понедельник.
Чтобы запланировать выполнение задачи дважды только в воскресенье и понедельник:
11. Несколько задач
Можно запланировать несколько задач в одной записи с помощью точки с запятой:
12. Ежегодно (@yearly)
13. Ежемесячно (@monthly)
14. Еженедельно (@weekly)
15. Ежедневно (@daily)
16. Ежечасно (@hourly).
17. Выполнение задач при перезагрузке системы (@reboot).
@reboot полезен для тех задач, которые вы хотите запустить при перезагрузке системы.
18. Отправка результатов заданий на электронную почту
Wireless Comprehensive Advanced Technology. Build your network now.
Здравствуйте!
Прошу помочь настроить регулярную перезагрузку USB-модема через откл питания.
Требуется раз в сутки в 3 ночи откл и вкл питание модема. В рекламе заявлен функционал управления питанием, но в интерфейсе не нашел никаких способов это использовать на практике.
Если для этого потребуется в крон добавить скрипт, то прошу привести полный набор команд для этого, тк с линуксом я на «вы»
Прошу помочь настроить регулярную перезагрузку USB-модема через откл питания.
Требуется раз в сутки в 3 ночи откл и вкл питание модема. В рекламе заявлен функционал управления питанием, но в интерфейсе не нашел никаких способов это использовать на практике.
Если для этого потребуется в крон добавить скрипт, то прошу привести полный набор команд для этого, тк с линуксом я на «вы»
Ключик дёргается по gpio как и любой светодиод например
Просто для рестарта модема достаточно дёргать из крона или руками или ещё как service modemhelper poweroffon.
Подробнее как устроен инит см логику в скрипте W85modemhelper в ините.
Ключик дёргается по gpio как и любой светодиод например
Просто для рестарта модема достаточно дёргать из крона или руками или ещё как service modemhelper poweroffon.
Подробнее как устроен инит см логику в скрипте W85modemhelper в ините.
Буду очень благодарен, если напишите конкретную строчку, которую надо будет добавить в конфиг крона.
Роутер от меня далеко, бываю там наездами и не на долго, хочется иметь готовое решение, которое можно применить за 10 минут.
Буду очень благодарен, если напишите конкретную строчку, которую надо будет добавить в конфиг крона.
Роутер от меня далеко, бываю там наездами и не на долго, хочется иметь готовое решение, которое можно применить за 10 минут.
Когда оплатят готовое решение такое решение будет в UI. ;) Куда копать и что дёргать подсказка дана. cron на форуме обсуждался, формат записей гуглится за 2 минуты. Как работать с rwfs тоже описано в т.ч. готовить пакеты.
Т.е. тут 2 варианта, либо вы берёте предложенный мной инструмент и тратите своё время на изучение материала и делаете что нужно (что выходит за заложенный штатно функционал), либо заказчик оплачивает работы и оно появляется в UI где делать уже ничего не нужно кроме как накликать хотелку.
3го не дано.
Если что-то по первому варианту в процессе попыток не будет получаться - подскажу.
А решения которые можно применять в лоб заказываются и включаются штатно в софт. Собсно весь софт и есть набор таких вот решений.
Пока заказа на подобное не поступало, оплаты я не вижу.
P.S. Не хочу секретничать, потому вот честно и в лоб. Мы с железа (после запуска в серию) ничего не имеем вообще. А софт предоставляется в виде функционально фиксированной единицы где оплачиваются доработки и "новые" решения. Т.е. сами понимаете к чему я.
Когда оплатят готовое решение такое решение будет в UI. ;) Куда копать и что дёргать подсказка дана. cron на форуме обсуждался, формат записей гуглится за 2 минуты. Как работать с rwfs тоже описано в т.ч. готовить пакеты.
Т.е. тут 2 варианта, либо вы берёте предложенный мной инструмент и тратите своё время на изучение материала и делаете что нужно (что выходит за заложенный штатно функционал), либо заказчик оплачивает работы и оно появляется в UI где делать уже ничего не нужно кроме как накликать хотелку.
Если что-то по первому варианту в процессе попыток не будет получаться - подскажу.
А решения которые можно применять в лоб заказываются и включаются штатно в софт. Собсно весь софт и есть набор таких вот решений.
Пока заказа на подобное не поступало, оплаты я не вижу.
P.S. Не хочу секретничать, потому вот честно и в лоб. Мы с железа (после запуска в серию) ничего не имеем вообще. А софт предоставляется в виде функционально фиксированной единицы где оплачиваются доработки и "новые" решения. Т.е. сами понимаете к чему я.
Последний раз редактировалось 16/07/2020, 12:49 : sfstudioОк, не имею ничего против такого подхода. Тем более если честно и в лоб.
На самом деле если бы Вы просто сказали конкретную команду запуска, было бы достаточно. Просто выше Вы предложили способы изучения вопроса, но у меня нет такой возможности. Ибо тут конкретика вашего устройства.
Я правильно понимаю, что команда для рестарта (цикл off/on) руками из шела выглядит конкретно так
service modemhelper poweroffon
без опций и тд?
Ок, не имею ничего против такого подхода. Тем более если честно и в лоб.
На самом деле если бы Вы просто сказали конкретную команду запуска, было бы достаточно. Просто выше Вы предложили способы изучения вопроса, но у меня нет такой возможности. Ибо тут конкретика вашего устройства.
Я правильно понимаю, что команда для рестарта (цикл off/on) руками из шела выглядит конкретно так
service modemhelper poweroffon
Я правильно понимаю, что команда для рестарта (цикл off/on) руками из шела выглядит конкретно так
service modemhelper poweroffon
Да, это отключит и включит питание. Можно до этого ещё ввести "service modemhelper stop", чтобы завершить активные подключения перед перезапуском.
Я правильно понимаю, что команда для рестарта (цикл off/on) руками из шела выглядит конкретно так
service modemhelper poweroffon
Да, это отключит и включит питание. Можно до этого ещё ввести "service modemhelper stop", чтобы завершить активные подключения перед перезапуском.
В случае с hilink и другими вариантами прикидывающимися usb/eth достаточно снять питание кратковременно командой выше. Ничего завершать не нужно.
В случае с hilink и другими вариантами прикидывающимися usb/eth достаточно снять питание кратковременно командой выше. Ничего завершать не нужно.
Ок, ситуацию понял. Появились вопросы:
1. Понятный и проверенный на других роутерах путь - добавить в crontab строку рестарта модема, потом fs save && reboot
Но ведь эта настройка, наверное, исчезнет после обновления прошивки?
2. Не виданный мной ранее путь через rwfs - экспортировать имеющееся состояние, удалить в дереве все, кроме правленного инита, сжать tar и загрузить в роутер через морду.
Тут конечно все как в потемках, но допустим справлюсь. Но возникло сомнение - правленный файл заменяет оригинальный из прошивки, но вдруг в новых версиях прошивки прилетит что то важно и будет перезаписано моим кастомным?
Прошу ликбез и совет, каким путем идти правильнее?
Ок, ситуацию понял. Появились вопросы:
1. Понятный и проверенный на других роутерах путь - добавить в crontab строку рестарта модема, потом fs save && reboot
Но ведь эта настройка, наверное, исчезнет после обновления прошивки?
2. Не виданный мной ранее путь через rwfs - экспортировать имеющееся состояние, удалить в дереве все, кроме правленного инита, сжать tar и загрузить в роутер через морду.
Тут конечно все как в потемках, но допустим справлюсь. Но возникло сомнение - правленный файл заменяет оригинальный из прошивки, но вдруг в новых версиях прошивки прилетит что то важно и будет перезаписано моим кастомным?
Прошу ликбез и совет, каким путем идти правильнее?
Последний раз редактировалось 17/07/2020, 01:53 : Ilya_SA- В веб-интерфейсе в разделе Сервисы включаем демон cron daemon
- Подключиться через SSH
- Команда crontab -e
- В редакторе нажать i и ввести задание 00 03 * * * service modemhelper poweroffon для перезапуска модема, например, в 3 часа ночи каждый день.
- Нажать эскейп дважды
- ввести :wq
- Для проверки можно дать команду crontab -l в выводе должно быть в том числе введенное только что задание
- для сохранение дать команду fs save && reboot
Получилось сделать классическим способом через crontab, опишу "how to" может пригодится кому-то.
- В веб-интерфейсе в разделе Сервисы включаем демон cron daemon
- Подключиться через SSH
- Команда crontab -e
- В редакторе нажать i и ввести задание 00 03 * * * service modemhelper poweroffon для перезапуска модема, например, в 3 часа ночи каждый день.
- Нажать эскейп дважды
- ввести :wq
- Для проверки можно дать команду crontab -l в выводе должно быть в том числе введенное только что задание
- для сохранение дать команду fs save && reboot
После перезагрузки или отключении питания задание сохраняется.
Подождав 5 минут после начала перезагрузки после обновления, я получил возможность подключиться по wifi но не смог подключиться к админке, и модем не включился. Помогло только выключение питания и после этого все заработало, но задание для крона исчезло.
Прошу объяснить, это так и должно быть? Что по сути произошло?
Ну дык сразу сказано, что тут суть *nix и многие вещи применимые к большим *nix будут применимы и тут за некоторой спецификой описанной многократно уже.
При обновлении RWFS обнуляется. А вот почему админка оказалась недоступна интереснее. Возможно что-то у web сервера подглюкнуло, хотя очень странно. Если повториться стоит попробовать подключиться по ssh и посмотреть вывод cat /var/log/messages.
RWFS это сущность для временных правок пока оные не включены в основную ветку. Но можно использовать и для постоянных. Подготовить пакет (опять таки на форуме уже есть как) и заливать его после обновления.
Сразу в него включить все свои скрипы и прочее. Эдакое компромиссное решение. Если сделать rwfs не сбрасываемым по резету то получим запросто ситуацию что что-то направили, а для возвращения к жизни нужна физическая консоль т.к. сеть отвалилась вообще. Если не сбрасывать при обновлении то правки инита и конфигов не будут применены и в итоге, например, web сервер не сможет нормально взаимодействовать с инитом.
Как-то так.
Я честно гря не понимаю зачем дёргать модем раз в сутки если всё работает и без этого. Расскажите ради интереса.
P.S. Проехал чуть меньше 1000км от ЕКБ до Омска с ётовским модемом в аналогичном девайсе (сделанном для другого заказчика, рассказывал в фэйсбуке что за устройства) в машине ни повиснуть ни сессию порвать он ни разу не умудрился. Всю дорогу была внятная связь. Нужды его дёргать и тем более по расписанию я пока не увидел.
Ну дык сразу сказано, что тут суть *nix и многие вещи применимые к большим *nix будут применимы и тут за некоторой спецификой описанной многократно уже.
При обновлении RWFS обнуляется. А вот почему админка оказалась недоступна интереснее. Возможно что-то у web сервера подглюкнуло, хотя очень странно. Если повториться стоит попробовать подключиться по ssh и посмотреть вывод cat /var/log/messages.
RWFS это сущность для временных правок пока оные не включены в основную ветку. Но можно использовать и для постоянных. Подготовить пакет (опять таки на форуме уже есть как) и заливать его после обновления.
Сразу в него включить все свои скрипы и прочее. Эдакое компромиссное решение. Если сделать rwfs не сбрасываемым по резету то получим запросто ситуацию что что-то направили, а для возвращения к жизни нужна физическая консоль т.к. сеть отвалилась вообще. Если не сбрасывать при обновлении то правки инита и конфигов не будут применены и в итоге, например, web сервер не сможет нормально взаимодействовать с инитом.
Я честно гря не понимаю зачем дёргать модем раз в сутки если всё работает и без этого. Расскажите ради интереса.
На сервере установлен CentOS release 6.7 (Final). С Linux я сталкиваюсь впервые, познаний ноль. Все на уровне "гуголь" и логики. Поэтому, прошу совета:
Задача банальна: необходима перезагрузка сервера ежедневно в 07:00.
Сделано:
1. Создал скрипт по пути
2. Сделал shoutdown.sh исполняемым
3. В shoutdown.sh прописал скрипт
Что пробовал:
1. Не смог разобраться, где посмотреть лог работы сервера, поставил ip на пинг на ночь. Пакетов потерянных не было, следовательно сервер не перезагружался.
2. Вручную запустил скрипт командой
Сервер ушел в ребут. Т.е. скрипт рабочий. Значит проблема в cron.
3. Нашел лог cron. В нем напоминание о скрипте в 07:00:01 имеется
4. Команда crontab -l показывает мою команду.
5. При вводе crontab -e вижу это:
Что я делаю не так?
Оценить 4 комментария
chmod 744 /etc/scritpts/shoutdown.sh
я уже сделал файл исполнимым
-rwxr-xr-x
Думаю, в этом тоже могла быть причина :DDD
Добрый день. У вас опечатка в скрипте (shOutdown). Попробуйте:
Добрый день. Да, я только что заметил эту опечатку, поправил.
Так же, в скрипте, вместо
shutdown -r now
прописал как у вас
shutdown -r 0
Все операции, который вы прописали, мне понятны.
Есть только 2 вопроса:
1. принципиально важно класть файл скрипта к юзеру в /home/username/ ?
2. когда я пытаюсь редактировать cron командой "crontab -e" - у меня перестает что-либо печататься в консоли. В комментарии скриншот приложить нельзя. Добавил в основную тему сверху
Читайте также: