Блог программиста
не только о программировании

Дружественные ресурсы:

IntSystem.org | Веб-разработка, все о ней

DevOps-заметки |

25.06.2020

Запуск сервисов в termux на android

Многие продвинутые пользователи android зачастую так или иначе начинают работать с операционной системой так, как если бы они работали с обычным linux-дистрибутивом. Запущенный терминал, а иногда и ssh-сессия, использование линуксовых утилит, а иногда даже и запуск окружения рабочего стола. Запуск сервисов также является типовой задачей при таком использовании устройства. Под катом описываю, как запускать сервисы в termux на android.

Как это работает

Все сервисы внутри termux работают благодаря runit. Это замена стандартной системы инициализации, похожей на init. В некоторых дистрибутивах используется как родная система управления сервисами. Подробнее но в общих чертах о том что это такое можно прочитать здесь. А вот здесь находится вики-страница termux-services, это как раз то что потребуется.

Создание сервиса

Прежде всего необходимо установить пакет.

$ pkg install termux-services

Далее необходимо создать каталог и файлы в нем, описывающие сервис. В моем случае каталог с описанием всех сервисов /data/data/com.termux/files/usr/var/service. Если посмотреть содержимое, там уже может находиться описание некоторых сервисов.

drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 crond
drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 ftpd
drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 nginx
drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 php-fpm
drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 sshd
drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 telnetd
drwx------ 4 u0_a111 u0_a111 4096 Jun 20 21:53 tor

Создаем здесь папку с названием сервиса и переходим в нее.

$ mkdir service_example && cd service_example

Создаем файл run

$ nano run

И описываем в нем то, как будет запускаться сервис.

#!/data/data/com.termux/files/usr/bin/sh
exec python m.py -i dfdfdfd -z dfdfdfdfdfdfdfdfdfdfdfdfdfdfdf 2>&1

Первая строчка в комментарии это путь к оболочке, далее сама команда.

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

#!/data/data/com.termux/files/usr/bin/sh
mkdir -p ~/.nginx
if [ -f "$HOME/.nginx/nginx.conf" ]; then CONFIG="$HOME/.nginx/nginx.conf"; else CONFIG="$PREFIX/etc/nginx>
exec nginx -p ~/.nginx -g "daemon off;" -c $CONFIG 2>&1

Но в целом идея должна быть понятна: runit возмет именно этот файл за инструкцию как запускать сервис. Сохраняем изменения в файле и выходим (Ctrl+x и Enter). Далаем файл исполняемым.

$ chmod +x run

И теперь можно запускать сервис

$ sv-enable  service_example

Если все прошло без ошибок (а если они будут вы увидите их в выводе), то процесс можно будет найти в списке

Также рекомендую включить для termux блокировку от глубокого сна.

$ termux-wake-lock

Необходимо подтвердить блокировку на самом устройстве (также как при подключении к ПК через ADB). Это для того, чтобы устройство не уходило в сон, а вместе с ним и все запущенные в окружении termux процессы.