Запуск сервисов в 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 процессы.