Android手机上安装配置termux已经有很多教程,比如:Termux——安装配置_termux安装-优快云博客
本文介绍在termux环境中如何安装配置supervisor任务管理器。
在公司接触了一些服务器项目都是交由supervisor托管,实现服务的启停,自动重启等功能,在termux环境中安装使用supervisor和其他os上略有不同,具体步骤如下:
1. 安装python,执行:
pkg install python3
2. 安装supervisor,执行:
pip install supervisor
3. os has no attribute link 错误问题解决
此时启动supervisord会报错“os has no attribute link” 解决方法如下:
在termux用户主目录里执行:
vim /data/data/com.termux/files/usr/lib/python3.10/site-packages/supervisor/http.py
把python3.10替换成实际使用的版本号
将578行的 "os.link" 改成 “os.symlink”
4. 建立supervisor运行所需目录和文件,包括:
主配置文件:/data/data/com.termux/files/usr/etc/supervisord.conf (默认安装好后已存在,若不存在可照抄官方的)
目录:/data/data/com.termux/files/usr/etc/supervisor/conf.d 自己加的服务配置放在这里
目录: /data/data/com.termux/files/usr/var/log/supervisor 用于存放supervisor log文件
5. 启动supervisor运行:
执行:`supervisord` 默认读取 /data/data/com.termux/files/usr/etc/supervisord.conf 文件
执行 `supervisorctl status` 查看当前各任务运行状态
6. 加入启动脚本
若想在启动termux时候自动启动supervisord,需要在termux启动脚本${HOME}/.bashrc里加入如下命令:
kill -0 `cat $PREFIX/var/run/supervisord.pid 2>/dev/null` 2>/dev/null || supervisord
其中`kill -0`是检测指定进场号的进程是否在运行,只有当前无其他实例运行时才启动新实例。
7. 手机开机自动运行supervisor (需要root)
如要在每次手机开机或重启的时候自动启动supervisord需要获取手机的root权限,具体操作网上有许多教程可参考。
先准备一个脚本"start_supervisor.sh",内容如下:
#!/data/data/com.termux/files/usr/bin/bash
# 设置运行termux所需的环境变量
export PATH=/data/data/com.termux/files/usr/bin:$PATH
export PREFIX=/data/data/com.termux/files/usr
export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so
pidfile="/data/data/com.termux/files/usr/var/run/supervisord.pid"
conf="/data/data/com.termux/files/usr/etc/supervisord.conf"
# wait for filesystem ready
for i in $(seq 50); do
[ -d /sdcard/usr ] && break
sleep 3
done
# 启动supervisord,确保全局唯一实例
ps -p $(cat $pidfile 2>/dev/null) > /dev/null 2>&1 || supervisord -c $conf
在root成功后,进入termux,执行 `su -M` 进入root模式
将刚刚的这个脚本放到 "/data/adb/service.d" 目录中
设置脚本权限:
cd /data/adb/service.d
chown 0.0 start_supervisor.sh
chmod 0755 start_supervisor.sh
将上文提到的supervisor自动启动命令从 ${HOME}/.bashrc 中移除掉。然后重启手机,进入termux, 执行`supervisorctl status`, 可以发现supervisord已在运行。
实际上不启动termux,supervisor也会随着手机的启动在后台运行,这样supervisord运行在root空间,可以直接添加需要在root空间运行的任务。