Как запустить несколько файлов Python в одном терминале Ubuntu server?

Рейтинг: 0Ответов: 3Опубликовано: 20.07.2023

Как запустить одновременно несколько файлов Python в одном терминале? Мне нужно запустить 2 Телеграм бота, а покупать под каждого отдельный хостинг не хочется. Именно на ubuntu server! Там можно открыть только одно окно терминала (консоли)консоль на хосте

Ответы

▲ 3

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

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

т.е. для запуска двух скриптов:

./script1.py &
./script2.py &

оба скрипта теперь работают одновременно и в фоне, но при этом при закрытии консоли, процессы будут завершены. Чтобы этого избежать, после запуска скрипта, необходимо отсоединить его от текущей сессии шелла. Для этого есть команда disown <pid>. Узнать pid только что запущенного процесса можно из переменной $!. Т.о. ваш итоговый вариант запуска двух скриптов в фоне может быть таким:

./script1.py &
disown $!
./script2.py &
disown $!

Узнать что скрипт работает можно к примеру так

ps -aux|grep script1.py

И на всякий случай. Сразу встает вопрос "А как завершить фоновые процессы". Для этого нужно узнать pid процесса (команда pidof <name>) и послать ему сигнал завершения (команда kill <pid>)

kill `pidof script1.py`
kill `pidof script2.py`
▲ 0

Скачайте Screen. Это консольное приложение для поддержания нескольких оконных сессий.

Для установки пропишите в терминале эти команды:

sudo apt-get update
sudo apt-get install screen
▲ 0

Использовать nohup. Запускает процессы в фоновом режиме (не блокируя основное окно консоли):

nohup python3 /path/to/script.py >> /path/to/log.log 2>&1 &

После запуска будет выведен ID процесса, по которому его можно будет "убить":

kill ID

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