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

Linux: запуск графических приложений в фоне

— Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе?
— Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон?
— На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Если ответ хотя бы на один из вопросов «да», то эта статья для вас.

Думаю, что вы, так же как и я, нередко сталкивались с задачей запуска чего-либо в фоне таким образом, чтобы к этому чему-то потом можно было подключиться. Если с консольными программами тут проблем никаких нет, инструменты есть и они известны, например, тот же screen, то для графических приложений готовых инструментов нет (или же они малоизвестны).

На помощь нам приходит Xvfb (X virtual framebuffer) — виртуальный X-сервер, который для вывода использует не видеокарту, а оперативную память.

Работает всё достаточно просто и прозрачно, поэтому углубляться не буду (да, впрочем, и не во что углубляться), а просто опишу рабочие версии скриптов. Единственное, с чем пришлось повозиться в процессе их написания, так это с авторизацией X-сервера для возможности подлючения к сессии не обходя вопросы безопасности (т.е. не используя work around в виде «xhost +») — понимание, как всё должно работать пришло не сразу. Но обо всём по порядку.

Требования для работы скриптов

— Установленные пакеты: xvfb, x11vnc и либой vncviewer, например xtightvncviewer
— Ubuntu 10.04 (это не совсем требование, это то, на чём всё запускалось и тестировалось. После небольших правок это будет работать и на RHEL 5, но нужно иметь ввиду, что в пакете xvfb на RHEL5 нет сприпта-обёртки xvfb-run, но его можно найти в интернет или взять из deb-пакета в Ubuntu)

Скрипт запуска приложения

Скрипт для подключения к запущенному приложению

Запуск при старте системы

На этом всё. Приятного администрирования!

Update1: в комментариях рассказали (ykl) про xpra, который является частю проекта partiwm. В сущности — это готовое решение для выполнения тех же задач, что и мои скрипты написанное на python и не требующее VNC.

Update2: как справедливо заметил paramobilus, подобным образом запускать приложения на сервере можно и в случае отсутствия рабочего окружения, оконного-менеджера, X-ов и даже видеокарты.

Источник

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

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

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

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

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

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

как запустить скрипт в фоне linux. 1 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-1 1. картинка как запустить скрипт в фоне linux. картинка 1 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

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

command > /dev/null 2>&1 &

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

как запустить скрипт в фоне linux. 2. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-2. картинка как запустить скрипт в фоне linux. картинка 2. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

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

как запустить скрипт в фоне linux. 3 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-3 1. картинка как запустить скрипт в фоне linux. картинка 3 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

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

как запустить скрипт в фоне linux. 4 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-4 1. картинка как запустить скрипт в фоне linux. картинка 4 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

как запустить скрипт в фоне linux. 5 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-5 1. картинка как запустить скрипт в фоне linux. картинка 5 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

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

как запустить скрипт в фоне linux. 6 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-6 1. картинка как запустить скрипт в фоне linux. картинка 6 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

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

как запустить скрипт в фоне linux. 7 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-7 1. картинка как запустить скрипт в фоне linux. картинка 7 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

как запустить скрипт в фоне linux. 8 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-8 1. картинка как запустить скрипт в фоне linux. картинка 8 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

как запустить скрипт в фоне linux. 9 1. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-9 1. картинка как запустить скрипт в фоне linux. картинка 9 1. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

Выводы

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

Источник

Запустить процесс в фоне в Linux

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

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

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

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

/test-file.txt &
[1] 18960

После нажатия кнопки Enter программа автоматически запустится в фоновом режиме. При этом терминал покажет строчку со следующим содержимым «[номер_задания] идентификатор_процесса», и выдаст приглашение к вводу новоиспеченной команды.

Найти команды, работающие в фоновом режиме в Linux

Выполните следующую бригаду:

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

Где [1] и [2] идентификаторы поручений.

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

Дабы отобразить только идентификаторы процессов, введите:

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

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

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

Возврат програмки в приоритетный режим в Linux

Linux позволяет не только запускать программы в фоновом режиме, но и по хотению возвращать к привычному выполнению. Для этого существует два инструмента: команда (Команда — группа лиц, объединённая общими мотивами, интересами) fg и оператор %. Принцип их усилия предельно прост. fg требует указать номер задания в качестве параметра, а к % его нужно подставить сходу после оператора без пробелов.

Источник

Как запускать команды Linux в фоновом режиме

How to Run Linux Commands in Background

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

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

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

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

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

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

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

Используйте jobs утилиту для отображения состояния всех остановленных и фоновых заданий в текущем сеансе оболочки:

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

Чтобы вывести фоновый процесс на передний план, используйте fg команду:

Если у вас есть несколько фоновых заданий, включите % и идентификатор задания после команды:

Чтобы завершить фоновый процесс, используйте kill команду, за которой следует идентификатор процесса:

Переместить процесс переднего плана в фон

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

Поддерживать выполнение фоновых процессов после выхода из оболочки

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

Одним из способов является удаление задания из управления заданиями оболочки с помощью disown встроенной оболочки:

Если у вас есть несколько фоновых заданий, включите % и идентификатор задания после команды:

Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все SIGHUP сигналы (зависания). SIGHUP это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.

Чтобы запустить команду в фоновом режиме, используя nohup команду, введите:

Вывод команды перенаправляется в nohup.out файл.

Если вы выйдете из системы или закроете терминал, процесс не прекратится.

Альтернативы

Есть ряд программ, которые позволяют вам иметь несколько интерактивных сессий одновременно.

Screen

Вывод

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

Когда вы запускаете команду в фоновом режиме, вам не нужно ждать, пока она не завершится, прежде чем вы сможете выполнить еще одну.

Источник

Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

До сих пор мы вводили имена скриптов в командную строку и нажимали Enter, что приводило к немедленному запуску программ, но это — не единственный способ вызова сценариев. Сегодня мы поговорим о том как скрипт может работать с сигналами Linux, о различных подходах к запуску скриптов и к управлению ими во время работы.

Сигналы Linux

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

Код сигналаНазваниеОписание
1SIGHUPЗакрытие терминала
2SIGINTСигнал остановки процесса пользователем с терминала (CTRL + C)
3SIGQUITСигнал остановки процесса пользователем с терминала (CTRL + \) с дампом памяти
9SIGKILLБезусловное завершение процесса
15SIGTERMСигнал запроса завершения процесса
17SIGSTOPПринудительная приостановка выполнения процесса, но не завершение его работы
18SIGTSTPПриостановка процесса с терминала (CTRL + Z), но не завершение работы
19SIGCONTПродолжение выполнения ранее остановленного процесса

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

Bash-скрипты не контролируют эти сигналы, но они могут распознавать их и выполнять некие команды для подготовки скрипта к последствиям, вызываемым сигналами.

Отправка сигналов скриптам

Оболочка bash позволяет вам отправлять скриптам сигналы, пользуясь комбинациями клавиш на клавиатуре. Это оказывается очень кстати если нужно временно остановить выполняющийся скрипт или завершить его работу.

Завершение работы процесса

Комбинация клавиш CTRL + C генерирует сигнал SIGINT и отправляет его всем процессам, выполняющимся в оболочке, что приводит к завершению их работы.

Выполним в оболочке такую команду:

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Завершение работы процесса с клавиатуры

Временная остановка процесса

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Число в квадратных скобках — это номер задания, который оболочка назначает процессу. Оболочка рассматривает процессы, выполняющиеся в ней, как задания с уникальными номерами. Первому процессу назначается номер 1, второму — 2, и так далее.

Если вы приостановите задание, привязанное к оболочке, и попытаетесь выйти из неё, bash выдаст предупреждение.

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

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Выглядит её вызов так:

Перехват сигналов

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

Рассмотрим пример, в котором показано, как при вызове команды trap задаётся код, который надо выполнить, и список сигналов, разделённых пробелами, которые мы хотим перехватить. В данном случае это всего один сигнал:

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

Перехватить сигнал выхода из скрипта можно, использовав при вызове команды trap имя сигнала EXIT :

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

Модификация перехваченных сигналов и отмена перехвата

Для модификации перехваченных скриптом сигналов можно выполнить команду trap с новыми параметрами:

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Модификация перехвата сигналов

После модификации сигналы будут обрабатываться по-новому.

И нажмём CTRL + C на клавиатуре.

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Сигнал, перехваченный до отмены перехвата

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

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

Запустим его, указав после имени символ амперсанда ( & ):

Это приведёт к тому, что он будет запущен как фоновый процесс.

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

Скрипт будет запущен в фоновом процессе, в терминал выведется его идентификатор, а когда его выполнение завершится, вы увидите сообщение об этом.

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

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

Что если нужно, чтобы скрипт продолжал работать и после закрытия терминала?

Выполнение скриптов, не завершающих работу при закрытии терминала

Применим эту методику при запуске нашего скрипта:

Вот что будет выведено в терминал.

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Просмотр заданий

Команда jobs позволяет просматривать текущие задания, которые выполняются в оболочке. Напишем такой скрипт:

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Запуск и приостановка скрипта

Запустим тот же скрипт в фоновом режиме, при этом перенаправим вывод скрипта в файл так, чтобы он ничего не выводил на экране:

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Получение сведений о скриптах

Перезапуск приостановленных заданий

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Теперь скрипт выполняется в фоновом режиме.

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

Для перезапуска задания в обычном режиме воспользуйтесь командой fg :

Планирование запуска скриптов

Вызов команды at выглядит так:

Эта команда распознаёт множество форматов указания времени.

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Планирование заданий с использованием команды at

Для того чтобы посмотреть список заданий, ожидающих выполнения, можно воспользоваться командой atq :

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Список заданий, ожидающих выполнения

Удаление заданий, ожидающих выполнения

как запустить скрипт в фоне linux. image loader. как запустить скрипт в фоне linux фото. как запустить скрипт в фоне linux-image loader. картинка как запустить скрипт в фоне linux. картинка image loader. — Вы хотите запустить linuxdcpp из консоли на домашнем компьютере находясь на работе? — Вы хотите, чтобы он запускался сразу после загрузки системы, но не желаете использовать автологон? — На вашем сервере есть программа, которая работает только в графическом режиме, но вы не хотите держать графическую сессию пользователя всё время включенной?

Запуск скриптов по расписанию

Планирование однократного запуска скриптов с использованием команды at способно облегчить жизнь во многих ситуациях. Но как быть, если нужно, чтобы скрипт выполнялся в одно и то же время ежедневно, или раз в неделю, или раз в месяц?

Crontab выполняется в фоне и, основываясь на данных в так называемых cron-таблицах, запускает задания по расписанию.

При планировании запуска скрипта по расписанию crontab принимает данные о том, когда нужно выполнить задание, в таком формате:

Например, если надо, чтобы некий скрипт с именем command выполнялся ежедневно в 10:30, этому будет соответствовать такая запись в таблице заданий:

Здесь универсальный символ « * », использованный для полей, задающих день месяца, месяц и день недели, указывает на то, что cron должен выполнять команду каждый день каждого месяца в 10:30.

Если, например, надо, чтобы скрипт запускался в 4:30PM каждый понедельник, понадобится создать в таблице заданий такую запись:

Нумерация дней недели начинается с 0, 0 означает воскресенье, 6 — субботу. Вот ещё один пример. Здесь команда будет выполняться в 12 часов дня в первый день каждого месяца.

Затем можно вводить команды формирования расписания:

Благодаря этой команде скрипт будет вызываться ежедневно в 10:30. Если вы столкнётесь с ошибкой «Resource temporarily unavailable», выполните нижеприведённую команду с правами root-пользователя:

Организовать периодический запуск скриптов с использованием cron можно ещё проще, воспользовавшись несколькими специальными директориями:

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

Запуск скриптов при входе в систему и при запуске оболочки

Автоматизировать запуск скриптов можно, опираясь на различные события, такие, как вход пользователя в систему или запуск оболочки. Тут можно почитать о файлах, которые обрабатываются в подобных ситуациях. Например, это следующие файлы:

Итоги

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

Уважаемые читатели! А вы пользуетесь средствами планирования запуска сценариев командной строки по расписанию? Если да — расскажите пожалуйста о них.

Источник

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

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