Вы можете запустить на сервере бот, написанный на Python или любом другом языке программирования. Чтобы обеспечить постоянную и надежную работу скрипта, потребуется настроить автозапуск и перезагрузку.
Подготовка
Загрузите файлы бота, например, в директорию /home/me и создайте виртуальное окружение:
python3 -m venv venv
source ./venv/bin/activate
Далее установите все пакеты:
pip install -r requirements.txt
Если файл requirements.txt со списком пакетов отсутствует, установите все расширения вручную.
Screen — самый простой метод
Для простого запуска скрипта в фоне можно воспользоваться утилитой screen , которая позволяет создавать неограниченое количество сессий в терминале.
Ее необходимо установить из репозитория:
sudo apt install screen
Запустите новое окно командой:
screen
Активируйте виртуальное окружение и запустите бота:
source ./venv/bin/activate
python main.py
Осталось свернуть сессию. Для этого необходимо зажать сочетание клавиш Ctrl + A, после чего нажать D.
Как закрепить приложения в фоновом режиме в Андроид?
Список основных команд:
- screen — запуск новой сессии;
- screen -ls — просмотр всех сессий;
- screen -r — открыть конкретную сессию (если сессия всего одна, то имя можно не указывать).
- Ctrl + A + D — свернуть сессию;
- Ctrl + A + K — завершить сессию.
Это простой метод, который не требует создания конфигурационных файлов. Однако если сервер будет перезагружен или во время работы скрипта возникнет ошибка, бот будет нужно запустить заново.
Systemd
Рассмотрим запуск приложения в роли службы. Systemd — это менеджер системы и служб Linux. Он управляет службами, которые описаны в конфигурационных файлах, и запускает их.
Создайте новый юнит systemd:
sudo nano /lib/systemd/system/bot.service
Добавьте в него следующее содержимое:
[Unit]
Description=Timeweb Bot Service
After=network.target
[Service]
Type=idle
Restart=always
RestartSec=3
User=root
WorkingDirectory=home/me/bot
ExecStart=/home/me/bot/venv/bin/python /home/me/bot/main.py
[Install]
WantedBy=multi-user.target
- Description — название службы,
- ExecStart — путь до интерпретатора Python и скрипта,
- User — пользователь, от которого будет запущена служба,
- Restart=always — указание, что необходимо перезапустить бота после ошибки.
Осталось перезагрузить юниты, добавить службу в автозапуск и активировать бота:
sudo systemctl daemon-reload
sudo systemctl enable bot.service
sudo systemctl start bot.service
Теперь проверьте работу бота. Если бот не отвечает, попробуйте запустить его в терминале и посмотреть, нет ли ошибок
PM2
Еще один способ запустить бота — использовать менеджер процессов PM2. О нем мы подробнее писали в Community. PM2 автоматически перезапускает бота и сохраняет логи.
Установите следующие пакеты:
Запуск команд Linux в фоновом режиме. Командная строка Linux
sudo apt install nodejs
sudo apt install npm
Далее установите PM2:
npm install pm2 -g
Для запуска бота перейдите в директорию с ботом и запустите его командой:
pm2 start main.py —interpreter=python3
Источник: timeweb.cloud
Запускаем процессы в фоне с помощью screen
Работая через терминал, вы запускаете процессы в текущей сессии. Если закрыть окно, выполнение процесса будет завершено, а результат утерян. Это является проблемой при выполнении ресурсоемких задач (сложных sql-запросов, работы с большими объемами данных и так далее), которые могут занять продолжительное время. К тому же, любая запущенная команда блокирует терминал до своего завершения, лишая вас возможности выполнять другие операции.
Для решения этой проблемы существует терминальный менеджер screen. Он запускает процессы в собственных сессиях, которые не завершаются при выходе пользователя из системы. Таким образом вы можете закрыть терминал, оставив какие-то процессы работающими в фоне, и в любой момент вернуться к ним.
Помимо выполнения долгих скриптов, screen можно использовать для запуска программ, которые должны работать на сервере в фоне. Например, мы нередко используем его для запуска проектов на nodejs или python, работы shell-скриптов. Для запуска фоновых процессов на продакшн-сервере лучше использовать утилиту supervisor, которая создана специально для этих задач, но screen проще и удобнее для тестирования и отладки приложений.
В этой статье рассказывается о базовых командах, которые могут пригодиться для запуска ваших процессов. Подробную документацию по screen можно найти на официальном сайте.
Установка
Чтобы установить screen, воспользуйтесь менеджером пакетов для вашей системы
$ apt install screen
Работа с сессиями
Попробуем создать новую сессию:
$ screen -S my_first_screen_session
Будет запущена новая сессия, как если бы вы авторизовались на сервере в обычной tty-консоли. В ней можно запустить какой-то процесс, «свернуть» ее и продолжить работать в консоли.
Чтобы «свернуть» сессию, нажмите Ctrl+A, затем d. Первый шорткат переведет скрин режим принятия команд, а команда d (disconnect) отключится от текущей сессии, оставив ее запущенной в фоне.
Чтобы вернуться к последней подключенной сессии, введите команду
Для того, чтобы получить список запущенных сессий от имени текущего пользователя, добавьте ключ -ls или -list
$ screen -list
Вы можете подключиться к определенной сессии по её имени (идентификатору), добавив его в конце команды
$ screen -r Hawk
Чтобы завершить определенную сессию, можно отправить в нее выполнение команды «quit»
$ screen -S Hawk -X quit
Запуск процесса в фоне
Чтобы сразу запустить в скрине какой-то процесс, достаточно передать команду на его выполнение при запуске сессии
$ screen -S <session_name> <command>
$ screen -S Hawk node index.js
Перед вами откроется новый скрин, где будет выполняться переданная команда. Теперь можно свернуть скрин и процесс продолжит выполнение. Ctrl+A, D.
Важно помнить, что при подобном запуске, если процесс завершит свое выполнение (например, вследствие ошибки), то скрин также завершит работу. Если вы хотите иметь возможность посмотреть вывод процесса (узнать текст ошибки) в случае остановки скрипта в скрине, запускайте его в два этапа: сперва создаем сессию, потом запускаем в ней процесс — так вы сможете зайти в скрин с помощью -r
Запуск процесса в новой сессии в фоне
Чтобы запустить скрин сразу в свернутом виде, нужно дополнительно передать параметры -dm
$ screen -dmS <session_name> <command>
Рекомендуется либо заранее проверить, что переданная команда запускается корректно. Иначе вы увидите только сообщение о том, что скрин завершил работу.
[screen is terminating]
Вывод
Screen позволяет использовать терминальные сессии, которые можно «сворачивать». С его помощью можно запускать в фоне ресурсоемкие задачи и процессы, которые должны быть запущены постоянно.
If you like this article, share a link with your friends
Read more
We talk about interesting technologies and share our experience of using them.
Источник: codex.so
Как запускать команды Linux в фоновом режиме
Выполнение команды Linux занимает слишком много времени? Используйте любой из этих шести методов, чтобы отправить его в фоновый режим.
Команды Linux — отличный способ взаимодействия с системой с помощью терминала. Однако иногда для завершения текущей задачи может потребоваться некоторое время. Это заставляет пользователей либо ждать завершения процесса в течение значительного времени, либо вообще создавать новую оболочку.
К счастью, вы можете запускать команды Linux в фоновом режиме, следуя нескольким простым методам.
1. Добавьте амперсанд после вашей команды
Самый простой способ запустить фоновую команду Linux — добавить символ амперсанда ( к своей команде, вы сможете сразу же использовать оболочку.
2. Используйте bg для отправки запущенных команд в фоновом режиме
Иногда вы запускаете команду только для того, чтобы узнать, что для ее завершения требуется гораздо больше времени. Вы можете легко отправлять такие команды в фоновом режиме, нажимая клавиши Ctrl + Z , а затем используя команду bg . Нажатие Ctrl + Z останавливает запущенный процесс, и bg переводит его в фоновый режим.
Вы можете просмотреть список всех фоновых задач, введя jobs в терминале. Используйте команду fg , чтобы вернуться к текущей задаче.
3. Отправляйте команды в фоновом режиме с помощью nohup
Команда nohup в Linux позволяет администраторам запускать команды терминала, невосприимчивые к сигналам HUP или Hang Up . Вы можете легко запускать команды в фоновом режиме в Linux с помощью nohup.
В приведенном ниже примере выполняется простое сканирование портов Nmap в фоновом режиме.
Одним из ключевых преимуществ nohup является то, что ваши команды будут выполняться, даже если вы выйдете из командной оболочки. Кроме того, он генерирует файлы журналов выполнения. Найдите nohup.out в текущем каталоге или внутри $HOME .
4. Запускайте фоновые команды, используя системные перенаправления
Вы также можете запускать фоновые команды в Linux, используя системные перенаправления. Например, если вы запустите приведенную ниже команду ping , ваша оболочка выполнит ее в фоновом режиме и немедленно вернет вам управление терминалом.
Здесь вывод команды ping перенаправляется на output.log . Вы можете заменить его на /dev/null , если хотите отменить результат. 2> сигнализирует о запуске этой команды в фоновом режиме.
5. Настройте выполнение команд Linux в фоновом режиме с помощью disown
Команда disown упрощает запуск процессов в фоновом режиме. Во-первых, вам нужно отправить задачу в фоновый режим с помощью оператора и Ctrl + Z , удобны, но система завершит фоновое задание при закрытии оболочки.
С другой стороны, такие инструменты, как nohup и disown , поддерживают выполнение вашей команды, даже когда вы выходите из системы или завершаете работу оболочки.
Если вы оставите свои программы в фоновом режиме на долгое время, они могут превратиться в процессы-зомби, если не будут правильно настроены. Эти процессы могут значительно замедлить работу системы. Поэтому обязательно время от времени выявляйте и уничтожайте процессы-зомби.
Смотрите другие статьи на нашем канале .
Как использовать рабочие пространства и активные углы в Linux Mint для повышения производительности
Изменения Linux за эти годы
12 самых безопасных сайтов для загрузки свободного программного обеспечения Linux
Вы также можете оставить свое мнение об этом посте в разделе комментариев.
Источник: dzen.ru