Как можно запустить команду screen внутри bash скрипта?

Почему скрипт bash не работает через cron и выводит ошибку "Must be connected to a terminal", хотя он функционирует нормально при запуске из консоли?
  • 22 сентября 2023 г. 10:38
Ответы на вопрос 2
Для запуска команды screen внутри bash скрипта можно использовать следующий синтаксис:

```bash
screen -dmS session_name command_to_run
```

Где:

- `-dmS session_name` создает новую сессию screen с заданным именем (session_name);
- `command_to_run` - команда, которую нужно выполнить внутри этой сессии.


Например, если нужно запустить скрипт с именем "myscript.sh" в сессии "mySession", команда будет выглядеть так:

```bash
screen -dmS mySession ./myscript.sh
```

Что касается ошибки "Must be connected to a terminal" при запуске bash скрипта через cron, она возникает потому, что cron не является интерактивной оболочкой, поэтому он не имеет терминальной сессии. Многие приложения используют терминал для определенных операций, и если его нет, то такие операции не могут быть выполнены.

Чтобы предотвратить эту ошибку, вы можете добавить параметр `TERM` в ваш скрипт cron:

```bash
export TERM=xterm
```

Этот параметр устанавливает переменную окружения `TERM` в значение `xterm`, что позволяет скрипту правильно работать без терминала.

Пример crontab-файла для запуска bash скрипта с помощью screen:

```
* * * * * export TERM=xterm && screen -dmS mySession /path/to/myscript.sh
```

Таким образом, скрипт будет запускаться каждую минуту, устанавливая переменную окружения `TERM` и запуская скрипт внутри сессии screen.
Запуская screen из крона, вы должны обратить внимание на то, что отсутствует открытая сессия, к которой скрин должен подключиться. Однако, вы можете запустить предварительно открепленный screen с опциями -d -m. 
Для этого, для каждой сессии в списке (который можно получить с помощью команды screen -ls), выполните команду screen -d -m -S "${session}" -X quit. 

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