Manage auto-startup services in Termux.
ここでは2つのTermux拡張機能を紹介します。1つ目はTermux-servicesで、Termuxアプリを起動した後のサービスを管理します。2つ目はTermux:Bootで、Androidの起動後にTermuxのサービスを自動起動するよう設定します。
なぜTermux-servicesが必要なのでしょうか。
Termuxでサービスを起動・停止したい、アプリを開いた後にサービスを自動起動したい。しかしTermuxにはSystemdがありません。自動起動したいサービスを~/.bashrcや~/.profileに書き込み、停止したいときはプロセスを探してkillコマンドで止めるしかないのでしょうか。
こういう時にTermux-servicesは便利なツールになります。
Termux-servicesを使うと、一連のコマンドでサービスの実行を制御でき、自由にサービスを起動・停止できます。常駐プログラム(daemon)を必要とするソフトウェアには特に便利です。たとえばsshd、apache2、bitcoinなどはTermux-services経由で、Termuxアプリを開いた後に自動起動できます。
Termux-servicesは「runit」を使ってシステムサービスを管理します。runitは非常にシンプルなinitサービスマネージャーで、現在これを採用しているLinuxディストリビューションは少数です。runitを使うLinuxディストリビューションといえば、有名なのはArtix LinuxとVoid Linuxあたりでしょう。
まずTermux-serviceの使い方を紹介し、その後でTermux: Bootの使い方を説明します。
1. Termux-servicesの自動起動#
- Termux-servicesパッケージをインストールします。
pkg install termux-servicesTermuxは一部のパッケージをインストールする際、runitのサービスファイルも一緒にインストールします。すべてのサービスファイルは
$PREFIX/var/service/svにあります。たとえば
opensshパッケージをインストールすると、Termux-servicesはSSHDのサービスファイルを自動で用意します。$PREFIX/var/service/sv/sshd/runはサービス起動後に実行するコマンドを定義し、$PREFIX/var/service/sv/sshd/downはサービス停止後に実行するコマンドを定義します。SSHDサービスを起動・停止するには、以下のコマンドを使います。
# 起動
sv up sshd
# 停止
sv down sshd
# アプリ起動後に自動起動
sv-enable sshd
# アプリ起動後の自動起動を解除
sv-disable sshd- 同じ要領で、Termux起動後に他のプログラムを実行したい場合は、サービスファイルを作成します。スクリプトを書く際はrunit公式のテンプレートを参照してください。ここでは自作スクリプトを実行する例を示します。
# 内容を編集
echo "echo 'Hello world' ">> ~/run.sh
chmod +x ~/run.sh
# サービスファイルを追加
vim $PREFIX/var/service/sv/myscript/run
# 以下を記入:
bash ~/run.sh
# Termuxアプリ起動後に自動起動するよう設定
sv-enable myscript2. Termux:Bootで起動時に自動起動#
Termux:Bootは、Androidシステムが起動した後に、あなたが書いたスクリプトを自動で実行します。
実はTermux-serviceと組み合わせなくても使えます。Termux:BootはTermuxを呼び出して任意のコマンドを実行できます。ただ、システムサービスは集中管理した方がよいと思います。つまり構成としては、まずTermux-servicesで実行したいサービスを追加し、その後Termux:BootでTermuxを自動起動します。そうすれば、自分で書いたサービスもすべて一緒に起動します。
Termux: Boot APKをインストールします。
アイコンをタップして一度起動します。これで起動後に自動起動するようになります。
Termuxでディレクトリを作成し、起動時スクリプトを追加します。
mkdir -p ~/.termux/boot/
vim ~/.termux/boot/run.sh- 以下の内容を記入し、起動後にrunitのすべての自動起動サービスを実行するよう設定します。
#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
. $PREFIX/etc/profile
