bash запуск скрипта в фоне

Запуск bash скрипта в фоновом режиме через Systemd

bash запуск скрипта в фоне

Понадобилось на днях написать простой bash-скрипт, для постоянного мониторинга каталога на наличие в нем файлов *.pdf, с последующей их конвертацией в формат txt. Скрипт должен был работать в фоновом режиме и автоматически запускаться при перезагрузке.

Для начала нужно убедиться, что ваш дистрибутив работает с Systemd, командой:

/run/systemd/system/ — юниты, созданные в рантайме. Этот каталог приоритетнее каталога с установленными юнитами из пакетов.
/etc/systemd/system/ — юниты, созданные и управляемые системным администратором. Этот каталог приоритетнее каталога юнитов, созданных в рантайме. В этом каталоге мы и будем создавать свой юнит.

Переходим в каталог /etc/systemd/system/ и создаем в нем, либо копируем какой-либо существующий файл, к примеру sshd.service, и в нем пишем:

Подробнее о каждой секции:
Секция [Unit]:
Содержит общую информацию о сервисе, его описание, и то, что он должен стартовать после запущенного демона Syslog.

Секция [Service]
Непосредственная информация о нашем сервисе.
Параметр ExecStart указывает на исполняемый файл нашего сервиса. Нужно указывать абсолютные пути, в случае с bash-скриптом путь до скрипта берем в одинарные кавычки.
Type=forking означает, что запускаемый скрипт будет работать в режиме демона. Если мы хотим, чтобы скрипт выполнился один раз, то указываем Type=simple.

Это работающий файл сервиcа Systemd, с небольшим функционалом. Сохраняем файл, и выполняем команду systemctl daemon-reload, чтобы Systemd узнал о нашем сервисе, и вы могли его запустить командой systemctl start bash.service.
У меня запустить получилось не с первого раза, так как сначала я указал не абсолютный путь в параметре ExecStart секции [Service]. После исправления Systemd все равно ругался на ту же ошибку, помогла перезагрузка.

Для просмотра состояния, старта, остановки, перезагрузки, включения или выключения системных сервисов используется команда systemctl. В более ранних версиях Systemd использовались команды service и chkconfig, они по прежнему включены в систему, в основном для обратной совместимости.

Ниже представлены основные команды systemctl:

Для более подробного знакомства с Systemd рекомендую почитать:

Источник

Как запустить процесс в фоне Linux

Как правило, выполнение команд в терминале связано с одним неудобством — прежде чем приступить к вводу следующей команды, следует дождаться выполнения предыдущей. Это происходит, поскольку текущий процесс блокирует доступ к оболочке операционной системы и в таких случаях говорят, что команда выполняется на переднем плане. Что же делать, если нужно запустить несколько команд одновременно? Есть несколько решений. Первое и наиболее очевидное — открыть дополнительное окно терминала. Второе — инициировать выполнение команды в фоновом режиме.

Если какой-либо процесс происходит в фоновом режиме, это значит, что он не предусматривает взаимодействия с пользователем, следовательно, доступ к оболочке остается свободным. Прочитав эту статью, вы узнаете как запустить процесс в фоне Linux и что делать, чтобы их выполнение не прерывалось после закрытия терминала.

Как запустить процесс в фоне Linux

Для выполнения команды в фоновом режиме достаточно добавить в конце символ амперсанда (&):

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

bash запуск скрипта в фоне

В фоновом режиме можно одновременно запускать сразу два, три, четыре процесса и даже больше.

Работая в фоновом режиме, команда все равно продолжает выводить сообщения в терминал, из которого была запущена. Для этого она использует потоки stdout и stderr, которые можно закрыть при помощи следующего синтаксиса:

command > /dev/null 2>&1 &

Здесь >/dev/null 2>&1 обозначает, что stdout будет перенаправлен на /dev/null, а stderr — к stdout.

bash запуск скрипта в фоне

Узнать состояние всех остановленных и выполняемых в фоновом режиме задач в рамках текущей сессии терминала можно при помощи утилиты jobs c использованием опции -l:

Вывод содержит порядковый номер задачи, идентификатор фонового процесса, состояние задачи и название команды, которая запустила задание.

bash запуск скрипта в фоне

В любое время можно вернуть процесс из фонового режима на передний план. Для этого служит команда fg:

Если в фоновом режиме выполняется несколько программ, следует также указывать номер. Например:

bash запуск скрипта в фоне

Для завершения фонового процесса применяют команду kill с номером программы:

bash запуск скрипта в фоне

Как перевести процесс в фоновый режим

Если изначально процесс был запущен обычным способом, его можно перевести в фоновый режим, выполнив следующие действия:

bash запуск скрипта в фоне

bash запуск скрипта в фоне

Работа процессов в фоне

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

bash запуск скрипта в фоне

bash запуск скрипта в фоне

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

bash запуск скрипта в фоне

Как видно на скриншоте, вывод команды перенаправляется в файл nohup.out. При этом после выхода из системы или закрытия терминала процесс не завершается. Существует ряд программ, которые позволяют запускать несколько интерактивных сессий одновременно. Наиболее популярные из них — Screen и Tmux.

Выводы

Чтобы запустить скрипт в фоне linux, достаточно добавить в конце знак &. При запуске команд в фоновом режиме отпадает необходимость дожидаться завершения одной команды для того, чтобы ввести другую. Если у вас возникли вопросы, обязательно задавайте их в комментариях.

Источник

Можно ли запустить выполнение команд bash в фоновом режиме?

bash запуск скрипта в фоне

Нет ничего более раздражающего, чем запустить команду в своем терминале и заставить ее работать в течение минут, а иногда и часов, и не иметь возможности снова использовать свой терминал. Конечно, вы можете использовать вкладки, но это неуклюжее решение, и оно не всегда оптимально, потому что вы можете хотеть видеть обновления во время работы. Здесь мы покажем вам несколько различных способов запуска команд bash в фоновом режиме в Linux.

Завершите команду с помощью &

Если вы хотите поместить команду в фоновый режим, используйте & (амперсанд) в конце простой способ сделать это. Таким образом, вы можете выполнить команду в фоновом режиме и продолжать использовать свой терминал во время его работы. Однако у этого есть уловка. Использование &не отключает команду от вас; он просто отодвигает его на задний план. Это означает, что пока вы пытаетесь использовать терминал, все, что команда хочет отправить STDOUT или STDERR все еще будет напечатано, что может отвлекать.

bash запуск скрипта в фоне

bash запуск скрипта в фоне

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

& После команды, затем отклонить ее

Чтобы использовать этот метод, начните с добавления &.

Как упоминалось выше, использование &этой команды переводит эту команду в фоновый режим, но не отключает ее от пользователя. Вы можете проверить это, набрав jobs в терминале. Он покажет, как команда работает в фоновом режиме, как мы видели раньше.

bash запуск скрипта в фоне

bash запуск скрипта в фоне

& После команды с /dev/null

Добавление & после команды переместит команду в фоновый режим, но в результате фоновая команда продолжит выводить сообщения в терминал по мере того, как вы его используете. Если вы хотите предотвратить это, подумайте о перенаправлении команды на /dev/null.

bash запуск скрипта в фоне

Nohup, с & и /dev/null

В отличие от предыдущих команд, использование nohup позволяет запускать команду в фоновом режиме и продолжать ее выполнение. Как? nohup обходит сигнал HUP (сигнал зависания), что позволяет запускать команды в фоновом режиме, даже когда терминал выключен. Объедините эту команду с перенаправлением на «/dev/null» (чтобы nohup не создавал файл nohup.out), и все перейдет в фон с помощью одной команды.

bash запуск скрипта в фоне

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

Тем не менее, некоторые программы в Linux не могут работать как демон или интегрироваться с современными системами инициализации. Это реальное неудобство, но его можно понять, поскольку не у всех разработчиков есть навыки или время для добавления новых функций.

К счастью, такие команды, как nohup или disown, все еще существуют и могут закрыть пробел в перемещении подобных программ на задний план. Они не идеальны или необычны, но они выполняют свою работу, когда это необходимо.

Источник

Запуск команд в фоновом режиме

Как запустить команду в фоновом режиме, чтобы сразу получить доступ к интерфейсу командной строки?

Команда, выполнение которой было запланировано принудительно, называется фоновым процессом. Фоновые процессы не отображаются на экране. Например, HTTPD-сервер Apache работает в фоновом режиме для обслуживания веб-страниц. В фоновый режим можно поместить скрипт оболочки или любую команду.

Синтаксис

Задачу (например, команду или скрипт) можно перевести в фоновый режим, добавив символ «&» в конец командной строки. Этот оператор переводит команду в фоновый режим и освобождает место в терминале. Команда, выполняемая в фоновом режиме, называется заданием. Во время работы фоновой команды можно выполнять любые другие команды. Синтаксис выглядит следующим образом:

Примеры

Чтобы перевести команду ls в фоновый режим, введите:
$ ls *.py > output.txt &

Как найти задания, работающие в фоновом режиме?

Выполните следующую команду:
jobs

Пример вывода данных:

Пример вывода данных:

Пример вывода данных:

Как прекратить выполнение заданий, работающих в фоновом режиме?

Для принудительного или постепенного завершения процесса следует использовать команду kill. Синтаксис выглядит следующим образом:

Как переместить процесс из фонового режима в приоритетный?

Пример вывода данных:

Чтобы перевести задание job id #2 в приоритетный режим, введите: %2 ИЛИ используйте команду: fg 2

Пример вывода данных:

Чтобы перевести это задание обратно в фоновый режим, нажмите клавишу Z, удерживая клавишу CTRL. При этом выполнение текущего приоритетного задания будет приостановлено. Введите следующую команду, чтобы перевести задание в фоновый режим:
%2 &
ИЛИ используйте команду: bg
Теперь командное задание grep будет работать в фоновом режиме.

Краткое описание всех полезных команд

Примечание: n — это id задания (id задания можно узнать, выполнив команду jobs).

bash запуск скрипта в фоне

P. S. Другие инструкции:

Ознакомиться с другими инструкциями вы можете на нашем сайте. А чтобы попробовать услугу — кликните на кнопку ниже.

Источник

Команда запуска bash в фоновом режиме

Главное меню » Linux » Mint » Команда запуска bash в фоновом режиме

bash запуск скрипта в фоне

Иногда процессам может потребоваться немного больше времени для запуска и завершения своего выполнения. Это когда одно за другим выполнение может стать для пользователя немного сложным. Это может включать отправку или мониторинг вывода в его журналы. Такие процессы могут неожиданно занять больше времени, поскольку компиляция кода не всегда гладкая. Таким образом, тем временем, когда компиляция продолжается, пользователи могут не иметь доступа к системе, пока компиляция не будет завершена. Во время компиляции терминал нельзя использовать, пока он не будет завершен. Чтобы продолжить обычную работу, пока вы обрабатываете команду, пользователям необходимо знать, как запускать команды в фоновом режиме в Linux. Давайте пройдемся по этой статьи, чтобы узнать о нем больше.

Чтобы запустить командный фон в Linux Mint 20, вам необходимо открыть Терминал из Меню в левом нижнем углу экрана, а затем выбрать опцию Терминал из списка доступных приложений.

После открытия терминала вы можете запускать команды в фоновом режиме или отправлять их в фоновый режим в соответствии с требованиями пользователя для бесперебойной работы.

Использование «&» для запуска команды в фоновом режиме:

Пользователи могут выполнять команды для запуска в фоновом режиме, если они добавят символ «&». Это будет означать, что пока команды выполняются, пользователи по-прежнему могут выполнять соответствующую работу вместе с ними без каких-либо перерывов. В качестве примера рассмотрим команду добавления чисел в текстовый файл.

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

Примечание. Как только описанный выше процесс должен быть запущен, снова появляется командная строка, которая позволяет пользователям возобновить свою работу, запустив команды в фоновом режиме в соответствии с требованиями пользователя. Если бы мы выполнили команду, не заканчивая ее символом «&», то не было бы никакого взаимодействия с пользователем, и оно было бы полностью заблокировано, если действие не будет завершено.

Чтобы отправить запущенную команду в фоновом режиме:

Если пользователи уже запустили определенную команду и пока они использовали свою систему, их командная строка блокируется, то они могут приостановить выполнение своего текущего процесса, находящегося на переднем плане, используя «ctrl + z» для Windows и «command + z» для системы Mac. Они переведут свои процессы на фазу временной остановки, а затем это поможет им использовать идентификатор задания, который мы уже видели ранее и были написаны в квадратных скобках.

Теперь процесс переднего плана приостановлен, и, зная идентификатор задания, мы можем установить и настроить фон. Мы можем сделать это, просто набрав это в нашей командной строке:

Теперь процесс снова запущен и работает в фоновом режиме.

Чтобы вывести фоновый процесс на передний план:

Пользователи также могут легко вывести фоновый процесс на передний план, просто указав рядом с ним fg [номер задания].

Теперь, опять же, пользователи могут использовать клавиши ctrl + z, чтобы снова приостановить процесс. Это простой способ сначала вывести процесс на передний план, а затем остановить его.

Чтобы завершить фоновое задание:

Пользователи могут не только запускать и перемещать различные процессы с помощью фоновых команд, но они также могут уничтожать конкретное задание или процесс, используя % перед идентификатором. В приведенном ниже примере показана та же команда. Просто введите kill% 1, потому что в нашем случае мы использовали 1.

В вашем случае вы можете попробовать заменить цифру «1», выделенную жирным шрифтом, на номер вашей работы.

Заключение:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *