Manage auto-startup services in Termux.
這裡分享兩個Termux擴充功能,第一個是Termux-services,管理啟動Termux APP之後的服務。第二個是Termux:Boot設定Android開機後,自動啟動Termux的服務。
為什麼你會需要Termux-services?
想要在Termux開關服務,設定開啟APP後自動啟動服務,但Termux沒有Systemd,難道只能將自動啟動的服務寫在~/.bashrc
或~/.profile
,要殺掉行程再用kill指令停止嗎?
這個時候Termux-services就是一個不錯的工具。
Termux-services讓你用一組指令來控制服務的執行,讓你能夠自由啟動與關閉服務,對需要常駐程式(daemon)的程式來說十分有用,例如sshd、apache2、bitcoin能透過Termux-services,自動在開啟Termux APP之後啟動。
Termux-services使用「runit」來管理系統服務,這是一款非常簡單的init啟動服務,現在只有少數Linux發行版使用。談到使用runit的Linux發行版,最著名的大概就Artix Linux和Void Linux了吧。
首先介紹Termux-service用法,後面再介紹如何使用Termux: Boot。
1. Termux-services 自動啟動#
- 安裝Termux-services套件
pkg install termux-services
Termux會在安裝部份套件的時候順便安裝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
# 開啟APP後自動啟動
sv-enable sshd
# 取消開啟APP後自動啟動
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 APP後自動啟動
sv-enable myscript
2. 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