Как да стартираме скрипт в постоянно работещ режим с screen на Linux

Как да стартираме скрипт в постоянно работещ режим с screen на Linux

Когато искаме скрипт да работи непрекъснато на сървър или компютър, дори след като затворим терминала или се разкачим от SSH сесията, можем да използваме помощната програма screen. Тя ни позволява да създаваме виртуални терминални сесии, които остават активни във фонов режим.

В тази статия ще разгледаме как да използваме screen, за да стартираме скрипт постоянно.


1. Инсталиране на screen

Ако screen не е инсталиран на вашата система, можете да го инсталирате със следната команда:

sudo apt install screen

2. Стартиране на нова screen сесия

След като screen е инсталиран, създаваме нова сесия с име по наш избор (например train_monitor):

screen -S train_monitor

Това ще отвори нов терминал в рамките на screen сесията.


3. Активиране на виртуалната среда (ако е необходимо)

Ако използвате Python проект, който работи във виртуална среда, активирайте я:

source ~/train_env/bin/activate

Тук ~/train_env е примерна директория на вашата виртуална среда.


4. Стартиране на скрипта

След активирането на виртуалната среда, стартирайте вашия Python скрипт. В зависимост от настройките на системата ви, използвайте:

python3 bdz.py


5. Излизане от screen без спиране на скрипта

След като стартирате скрипта, за да оставите процеса да работи във фонов режим и да се върнете към основния терминал:

  1. Натиснете комбинацията:
    Ctrl+A, после D

Това ще „детачне“ (откачи) сесията от терминала, но процесът вътре ще продължи да работи.


6. Връщане към активната screen сесия

Когато искате отново да влезете в същата screen сесия, използвайте:

screen -r train_monitor

Ако имате само една активна сесия, можете да изпуснете името и просто да напишете:

screen -r

7. Допълнителни полезни команди за screen

  • Списък на всички сесии:
screen -ls

Прекратяване на сесия:

Влезте в сесията и натиснете Ctrl+D или изпълнете командата exit, за да я затворите.

Принудително убиване на сесия:

screen -S ИМЕ_НА_СЕСИЯТА -X quit

Бонус

Ето ви и удобен скрипт, който автоматично ще направи всичко

1. Създаване на скрипта

Създайте нов файл, например start_train_monitor.sh:

nano start_train_monitor.sh

Поставете вътре следния код:

#!/bin/bash

# Име на screen сесията
SESSION_NAME="train_monitor"

# Път до виртуалната среда
VENV_PATH="$HOME/train_env"

# Име на скрипта
SCRIPT_NAME="bdz.py"

# Проверка дали вече има такава screen сесия
if screen -list | grep -q "$SESSION_NAME"; then
    echo "Сесия '$SESSION_NAME' вече съществува. Свързване към нея..."
    screen -r "$SESSION_NAME"
else
    echo "Стартиране на нова screen сесия '$SESSION_NAME'..."
    screen -S "$SESSION_NAME" -dm bash -c "
        source $VENV_PATH/bin/activate
        python3 $SCRIPT_NAME
        exec bash
    "
    echo "Скриптът е стартиран във фонов режим в screen сесия '$SESSION_NAME'."
    echo "Можете да се свържете с нея по-късно с: screen -r $SESSION_NAME"
fi

2. Даване на права за изпълнение

След като запишете файла, направете го изпълним:

chmod +x start_train_monitor.sh

3. Използване

Всеки път, когато искате да стартирате скрипта, просто изпълнете:

./start_train_monitor.sh

Ако сесията вече съществува, скриптът автоматично ще ви върне в нея. Ако не съществува, ще стартира нова, активира виртуалната среда и ще пусне Python скрипта.

Заключение

Използването на screen е отличен начин да оставим скриптовете си да работят дълго време без прекъсване, независимо от състоянието на терминала. Това е особено полезно при работа със сървъри и дълготрайни автоматизации.

Федя Серафиев

Федя Серафиев

Федя Серафиев e собственик на уебсайта urocibg.eu. Той намира удовлетворение в това да помага на хората да решават и най-сложните технически проблеми. Сегашната му цел е да пише лесни за следване статии, така че подобни проблеми изобщо да не възникват.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:

×