планировщик в Linux и запуск по расписанию команд и приложений

Если вы озадачитесь поиском обучающих программ или руководств по овладению Linux, то непременно найдете превосходные материалы об основах этой ОС. Вне всякого сомнения, вы обязательно должны научиться использовать ключевые команды навигации в командной строке, такие как cd и ls, но Linux предоставляет вам гораздо больше возможностей и без привлечения других сторонних инструментов или языков программирования. 

Введение в терминал Linux

Моя бабушка называет любой терминал «терминатором», что добавляет антуража. На самом деле терминал (bash) — это всего лишь командная строка с гораздо более широким набором функций, если сравнивать с Windows. Почти любое действие можно выполнить командой из терминала, но далеко не любое действие можно выполнить через окружения пользователя.

В этом и заключается преимущество терминала Linux — по сути из него можно полностью управлять системой, без необходимости окружения пользователя (графического интерфейса). На самом деле нередко серверы так и работают — черный экран, командная строка и все функции под рукой. В статье команды будут сгруппированы по функциям, а не по частоте использования, это связано с удобством восприятия и понимания.

Статья рассчитана на новичков и написана таким же новичком, в этом нет ничего зазорного — все когда-то начинали с нуля. Любое сообщество существует только до тех пор, пока есть приток новых участников.

Список команд в данной статье не является полным списком команд Linux. Во-первых, команд слишком много, чтобы перечислять их все, во-вторых, новичкам они не нужны, а профессионалы уже помнят их наизусть. Однако, не стоит расстраиваться, если у вас не получается запомнить команды — запоминание приходит с практикой. Чем чаще вы пользуетесь теми или иными командами, тем скорее вы их запомните.

Первая строка в любой программе BASH

Второе, что нужно сразу запомнить, это то, что первая строка в любой программе, написанной на BASH должна указывать на интерпретатор этого языка. И выглядит это обычно так:

Читайте также:  13 инструментов для работы с хэштегами в Твиттере и других соцсетях

#!/bin/bash

Первый символ #, второй символ — !. Сразу за ними (без каких-либо пробелов) путь до интерпретатора: /bin/bash. И сразу после него перенос строки. Снова никаких пробелов.

Это всё важно. Иначе могут возникать ошибки, которые при первом взгляде не выявить: пробельные символы не видны, а кто может догадаться о том, что кто-то по доброте душевной решил не экономить и наставить лишних символов там, где не надо? 😉

Сочетание #! называется Shebang. В Линукс, если файл начинается с этих символов, это даёт команду операционной системе проследовать по идущему за ним пути по которому должна находиться программа или интерпретатор для запуска сценария, следующего за этой строкой.

Как запустить по расписанию команду?

Для редактирования расписания планировщика cron выполните:

crontab -e

Формат строк расписания имеет вид:

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

Минута — время в минутах от 0 до 59

Час — от 0 до 23 День — день месяца от 1 до 31 Месяц — от 1 до 12 либо буквенные обозначения jan — dec День недели — от 0 до 6 (0 — воскресенье) или sat — sun Команда — строка в формате командного интерпретатора которая будет исполнена, допускается запись типа команда1 && команда2 для запуска нескольких команд подряд.

Значения минут, часов, дней можно указывать следующим образом: Значение — число обозначающее дату или время, допускается подстановочный знак * допускающий полный диапазон значений

Несколько значений — допускается указывать несколько значений через запятую, например 2,14,22 Диапазон значений — указывается через дефис, например 2-10 Шаг значений — указывается через дробь, в знаменатель которой ставится шаг, например */3 — каждое третье значение 0, 3, 6, 9 и т.д. В качестве числителя должен быть диапазон значений либо звездочка.

Рассмотрим следующий пример записи:

0 8-19/2 * * 1 /home/tvs/test01

Она означает что каждый второй час с 8 до 19 (8, 10,12,14,16) по понедельникам запускать скрипт test в домашнем каталоге пользователя tvs.

Читайте также:  Как проверить позиции сайта в поиске

Сразу хотим предостеречь вас от распространенной ошибки, при указании периодического исполнения все даты должны быть указаны явно, звездочка обозначает полный диапазон значений, а не их отсутствие. Например если вам требуется исполнять некий скрипт каждый час с 10 до 15 неправильно будет:

* 10-15 * * * /home/tvs/test1 Данная строка приведет к запуску скрипта каждую минуту в диапазоне с 10 до 15 часов. Правильно будет:

0 10-15 * * * /home/tvs/test1

Данная запись позволит запускать скрипт в начале каждого часа указанного диапазона.

Кроме даты можно использовать ряд специальных строк:

@reboot — выполнять команду при перезагрузке @yearly или @annually — выполнять 1 января, аналогично записи: "0 0 1 1 * " @monthly — выполнять 1 числа каждого месяца, аналогично "0 0 1 * * " @weekly — выполнять каждое воскресенье, равносильно "0 0 * * 0" @daily или @midnight — ежедневно в полночь,"0 0 * * * " @hourly — раз в час, "0 * * * * "

Так для ежедневного исполнения нашего скрипта каждую полночь можно написать:

@midnight /home/tvs/test1

Завершив составление расписания сохраняем файл и выходим из редактора. Пользовательское расписание будет сохранено в /var/spool/cron/crontabs под именем текущего пользователя.

Для системных и административных задач предусмотрен файл /etc/crontab. Синтаксис записей в нем отличается наличием дополнительного значения — пользователя, от чьего имени будет запущено задание:

минута час день месяц день_недели пользователь команда

Пример такой записи:

0 19 * * 1-5 root /etc/backup

Согласно которой в 19:00 с понедельника по пятницу будет запускаться скрипт/etc/backup от имени пользователя root.

Данный файл также содержит системные расписания, поэтому к его редактированию следует подходить с осторожностью. Все системные и административные задания следует размещать именно в нем.

whiptail

Классическое окно whiptail с сообщением в терминале

Интересовались ли вы когда-нибудь, как создаются эти милые всплывающие сообщения? Конечно же, с помощью whiptail. Это полезная специализированная утилита для отображения диалоговых окон непосредственно внутри терминала. Возможно, вы обратили внимание, что этот же стиль используется как в процессе установки Ubuntu, так и при других распространенных установках, выполняемых из командной строки.

Читайте также:  Как в Linux подключить новый диск, разметить и отформатировать разделы

Whiptail широко доступен и встроен во многие дистрибутивы для быстрого и простого использования. Эта утилита предоставляет большой выбор различных типов окон и полей для ввода данных:

whiptail
  • окна сообщений;
  • окна ввода произвольного текста;
  • окна ввода пароля;
  • окна с выбором “да”/“нет”;
  • окна меню с множественным выбором;
  • … и другие варианты!

С помощью whiptail попробуем создать в командной строке простое окно с выбором “yes”/“no”:

whiptail —yesno «would you like to continue?» 10 40

Этот случай применения whiptail с вариантом —yesno не вызывает никаких сложностей. Вы передаете тип окна, его размер и текст сообщения для вывода на экран. В итоге должен получиться подобный результат:

Окно с выбором “yes”/“no”, созданное с помощью whiptail

whiptail

Чтобы увидеть возвращаемое значение при выборе “yes” или “no”, можно вывести в консоль результат последней выполненной команды. Если вы просто введете echo $?, то увидите либо 0 в случае “yes’’, либо 1 при выборе “no”. Это можно легко включить в сценарий командной строки следующим образом: 

#!/bin/bash whiptail —yesno «would you like to continue?» 10 40 RESULT=$? if [ $RESULT = 0 ]; then echo «you clicked yes» else echo «you clicked no» fi

Содержимое файлов

Если вы хотите посмотреть содержимое файла, то можете обратиться к команде cat — в ответ на команду вы увидите все, что содержится в файле. Если данных слишком много, используйте конвейер и команду more — она позволит просматривать содержимое постранично:

cat file1 | more

Если вам нужно не только посмотреть содержимое файла, но и отредактировать его, тогда нужно использовать одну из утилит: nano либо vim. Это текстовые редакторы, при помощи которых вы можете открыть файл, изменить и сохранить его. Несмотря на кажущееся сходство, эти утилиты имеют ряд отличий; большинство пользователей сходится во мнении, что nano представляет собой более простой редактор, в то время как vim обладает большими возможностями.

С русскоязычной документацией nano вы можете ознакомиться по этой ссылке:

А документация vim доступна в этом разделе: