Запуск скрипта фоном linux

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

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

Для начала следует разобрать синтаксис командной строки. Запуск одной программы/скрипта и т.д. выполняем явным указанием, например:

Для запуска одной программы по завершении другой используется логический оператор && (двойной амперсанд), например:

Не очень удачный пример, так как можно было использовать перенаправление “|”, приблизительно это выглядело бы так:

Все эти примеры замечательны для использования в скриптах, однако запуск “долгих” процессов сделает терминал недоступным, как это было отмечено выше. В этом случае поможет следующий пример:

Именно одинарный & в конце строки, указанный через пробел.

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

Как видно, первая строка запускает процесс, но так как в системе мало txt-файлов, процесс завершается. Последующее нажатие Enter в терминале сообщает, что процесс успешно выполнен.

Рассмотрим другой вариант. Воспользуемся утилитой ping, результаты будем писать в файл.

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

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

Завершение процесса через killall покажет что процесс не завершился самостоятельно, а был “убит”.

Читайте также:  Отключить блокировку экрана linux mint

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

Выбор нового пароля

Сама команда jobs покажет сколько процессов выполняется и что именно выполняется, но различные ключи помогают отобразить больше информации. Ключ -l покажет еще и системный идентификатор процесса (PID). Ключ -p выведет только PID’ы, без описания.

Для перехода в приоритетный режим можно использовать команду fg 1 или %1.

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

Воспользоваться утилитой-мультиплексором screen. В некоторых дистрибутивах требуется установка.

Источник

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

Для возможности выполнения bash-подобных скриптов в Linux в с целом и в OpenWrt-версии оболочки busybox в частности существует легкая в применении инфраструктура: необходимо лишь добавить к строке запускаемого скрипта символ “&“. Но есть и менее очевидные частности.

Реализация простого запуска некоторого скрипта /srv/tools/script.sh в фоне:

Все бы хорошо, но запущенный таким образом скрипт проработает ровно до тех пор, пока вы залогинены на консоль сервера. При отключении от сервера скрипт автоматически завершится.

Для запуска скрипта без связи с сессией пользователя следует использовать утилиту nohup:

В этом случае запущенный скрипт останется работать даже при отключении от сервера, но весь выводимый скриптом текст будет записываться в файл nohup.log, создаваемый в текущем каталоге, о чем nohup непосредственно и информирует сообщением nohup: appending output to nohup.out. При этом данный файл будет создан даже в том случае, если у скрипта никогда не будет никакого вывода.

Чтобы nohup.log никогда не создавался, перенаправляем stdout скрипта в /dev/null:

nohup /srv/tools/netstat.sh >/dev/null &

Все, теперь лишних файлов более не создается и скрипт останется работать при отключении от консоли.

Интересно отметить, что при автоматическом запуске скриптов из /etc/rc.local при загрузке системы не требуется использовать ни перенаправление вывода, ни nohup – достаточно одного лишь символа &.

Читайте также:  Linux python run in background

Источник

Запускаем процессы в фоне с помощью screen

Taly

Работая через терминал, вы запускаете процессы в текущей сессии. Если закрыть окно, выполнение процесса будет завершено, а результат утерян. Это является проблемой при выполнении ресурсоемких задач (сложных sql-запросов, работы с большими объемами данных и так далее), которые могут занять продолжительное время. К тому же, любая запущенная команда блокирует терминал до своего завершения, лишая вас возможности выполнять другие операции.

Для решения этой проблемы существует терминальный менеджер screen. Он запускает процессы в собственных сессиях, которые не завершаются при выходе пользователя из системы. Таким образом вы можете закрыть терминал, оставив какие-то процессы работающими в фоне, и в любой момент вернуться к ним.

Помимо выполнения долгих скриптов, screen можно использовать для запуска программ, которые должны работать на сервере в фоне. Например, мы нередко используем его для запуска проектов на nodejs или python, работы shell-скриптов. Для запуска фоновых процессов на продакшн-сервере лучше использовать утилиту supervisor, которая создана специально для этих задач, но screen проще и удобнее для тестирования и отладки приложений.

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

Установка

Чтобы установить screen, воспользуйтесь менеджером пакетов для вашей системы

Работа с сессиями

Попробуем создать новую сессию:

Будет запущена новая сессия, как если бы вы авторизовались на сервере в обычной tty-консоли. В ней можно запустить какой-то процесс, «свернуть» ее и продолжить работать в консоли.

Чтобы «свернуть» сессию, нажмите Ctrl+A, затем d. Первый шорткат переведет скрин режим принятия команд, а команда d (disconnect) отключится от текущей сессии, оставив ее запущенной в фоне.

Читайте также:  What are linux loop devices

Чтобы вернуться к последней подключенной сессии, введите команду

Для того, чтобы получить список запущенных сессий от имени текущего пользователя, добавьте ключ -ls или -list

Вы можете подключиться к определенной сессии по её имени (идентификатору), добавив его в конце команды

Чтобы завершить определенную сессию, можно отправить в нее выполнение команды «quit»

Запуск процесса в фоне

Чтобы сразу запустить в скрине какой-то процесс, достаточно передать команду на его выполнение при запуске сессии

Перед вами откроется новый скрин, где будет выполняться переданная команда. Теперь можно свернуть скрин и процесс продолжит выполнение. Ctrl+A, D.

Важно помнить, что при подобном запуске, если процесс завершит свое выполнение (например, вследствие ошибки), то скрин также завершит работу. Если вы хотите иметь возможность посмотреть вывод процесса (узнать текст ошибки) в случае остановки скрипта в скрине, запускайте его в два этапа: сперва создаем сессию, потом запускаем в ней процесс — так вы сможете зайти в скрин с помощью -r

Запуск процесса в новой сессии в фоне

Чтобы запустить скрин сразу в свернутом виде, нужно дополнительно передать параметры -dm

Рекомендуется либо заранее проверить, что переданная команда запускается корректно. Иначе вы увидите только сообщение о том, что скрин завершил работу.

Вывод

Screen позволяет использовать терминальные сессии, которые можно «сворачивать». С его помощью можно запускать в фоне ресурсоемкие задачи и процессы, которые должны быть запущены постоянно.

Read more

We talk about interesting technologies and share our experience of using them.

Источник

Оцените статью
Adblock
detector