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

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

Понадобилось на днях написать простой 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

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

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

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

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

command > /dev/null 2>&1 &

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

Читайте также:  gspd промокод на концерт

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

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

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

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

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

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

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

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

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

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

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

Выводы

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

Источник

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

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

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

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

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

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

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

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

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

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

Читайте также:  интерьер спальни в майнкрафт

Nohup, с & и /dev/null

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

Большинство терминальных программ в 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).

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

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

Источник

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

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

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

Читайте также:  как посмотреть прочность предметов в майнкрафте

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение:

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

Источник

Компьютерный онлайн портал