前言

在使用Termux的过程中,我们会发现它虽然可以模拟运行许多Linux服务,但却无法像普通的Linux系统那样设置程序或服务的自启动。这给我们日常使用带来了很多不便。比如,当我们使用Termux搭建一个网站或云盘时,需要依赖MySQL、Nginx、PHP等其他服务,每次启动软件后还要一个个手动启动,效率极低。那么,有没有办法让我们需要的服务随软件的启动而自动运行呢?答案是肯定的!接下来,我将分享3种Termux中的服务自启动方法,并给出示例。

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

方法一:使用$HOME/.bashrc文件

使用Vim编辑器打开~/.bashrc文件:

vim ~/.bashrc

进入编辑模式,按下i键以进入插入模式。
在文件的末尾添加以下内容:

# 检查startup_manager.sh脚本是否已在运行,如果没有则启动
if ! pgrep -f "startup_manager.sh" > /dev/null; then
    nohup ~/startup_manager.sh > ~/startup_manager.log 2>&1 &
fi

按下Esc键以退出插入模式。
输入冒号:,然后输入wq,按下Enter键保存并退出Vim编辑器。

nohup ~/startup_manager.sh > ~/startup_manager.log 2>&1 &这个命令的含义是执行~/startup_manager.sh脚本内容,并将其输出(包括标准输出和标准错误输出)重定向到~/startup_manager.log文件中。通过使用nohup和&,这个命令可以在终端会话关闭后继续在后台运行。

ok 现在,每次启动Termux时,.bashrc文件中的命令将自动执行,并且只会启动一个名为startup_manager.sh的服务实例。

我们只需要将启动命令写在~/startup_manager.sh脚本中即可

#!/bin/bash

# 检查 PHP-FPM 服务是否已在运行,如果没有则启动
if ! pgrep -x "php-fpm" >/dev/null; then
    nohup php-fpm &
fi

# 检查 Nginx 服务是否已在运行,如果没有则启动
if ! pgrep -x "nginx" >/dev/null; then
    nohup nginx &
fi

# 检查 MySQL 服务是否已在运行,如果没有则启动
if ! pgrep -x "mysqld" >/dev/null; then
    nohup mysqld &
fi

# 启动其他的 Web 软件...

这样就解决打开新会话重复启动服务的问题。但是,如果需要开启多个自启动服务,这种方法可能会显得繁琐。

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

方法二:termux-services

官方文档

Termux官方提供了一个名为termux-services的工具,它基于runit封装而成,并针对Termux特殊结构进行了优化。termux-services会主动监视$PREFIX/var/service/目录,自动为每个服务生成守护程序,并在服务意外崩溃时重新启动服务。

首先,我们需要安装termux-services:

pkg install termux-services -y

安装完成后,termux-services将自动与termux软件一起启动。

原生支持的服务
termux-services提供了一些原生支持的服务,包括Apache、MySQL、Nginx、OpenSSH等。这些服务在安装时会自动在$PREFIX/var/service/目录下生成相应的服务文件夹。

包名守护进程端口描述
apache2httpd8080Apache Web 服务器 HTTP Web 服务器
atatd AT 和批量延迟命令调度工具和守护进程
bitcoinbitcoind Bitcoin 核心
busyboxtelnetd8023远程终端服务 Telnet
busyboxftpd8021FTP(文件传输协议)FTP
croniecrond 在预定时间运行指定程序的守护进程 cron
emacsemacsd 可扩展、可定制的文本编辑器-以及更多 EMACS
ipfsipfs 一种点对点超媒体分发协议 IPFS
libmosquittomosquitto1883MQTT 是一种轻量级的发布-订阅网络协议 MQTT
lighttpdlighttpd8080Lighttpd 轻量级 Web 服务器 HTTP Web 服务器
lndlnd Lightning Network 守护进程
mariadbmysqld3306MariaDB 是由其原作者共同开发的 MySQL 的社区分支
mpdmpd 音乐播放器守护进程 (MPD)
mpdscribblempdscribble MPD 客户端,用于提交正在播放的曲目
nginxnginx8080NGINX Web 服务器 HTTP Web 服务器
opensshsshd8022OpenSSH SSH
postgresqlpostgres5432PostgreSQL 数据库
privoxyprivoxy Privoxy 是具有高级过滤功能的非缓存 Web 代理 HTTP 代理
tortor The Onion Router 匿名叠加网络 Tor
transmissiontransmission BitTorrent 客户端 BitTorrent

1.我们可以使用以下命令来管理这些服务:

sv-enable <service>    # 将服务设为自启动
sv-disable <service>   # 取消服务的自启动
sv down <service>      # 停止服务,并使其在本次Termux运行期间失效
sv up <service>        # 启动服务
sv status <service>    # 查看服务的运行状态

2.相关命令
以SSH服务(sshd)为例,以下是一些相关命令:

sv-enable sshd         # 将sshd服务设为自启动
sv-disable sshd        # 取消sshd的自启动
sv down sshd           # 停止sshd服务,并使其在本次Termux运行期间失效
sv up sshd             # 启动sshd服务
sv status sshd         # 查看sshd服务的运行状态

3.自己编写一个自启动服务
接下来,我们演示如何编写一个自启动的服务。首先,在$PREFIX/var/service/目录下创建一个子目录,作为我们自启动服务的名称。例如,我们使用test_ato作为自启动服务的名字:

mkdir -p $PREFIX/var/service/test_ato

然后,在该子目录下创建一个执行脚本run:

vim $PREFIX/var/service/test_ato/run

脚本内容如下:

#!/data/data/com.termux/files/usr/bin/sh
exec 2>&1
exec ~/test/test.sh 2>&1

保存并赋予该脚本执行权限:

chmod +x $PREFIX/var/service/test_ato/run

接下来,我们需要配置服务的输出日志。在该子目录下创建一个log目录,并在其中创建一个run脚本:

mkdir -p $PREFIX/var/service/test_ato/log
vim $PREFIX/var/service/test_ato/log/run

在log/run中写入以下内容:

#!/data/data/com.termux/files/usr/bin/sh
svlogger="/data/data/com.termux/files/usr/share/termux-services/svlogger"
exec "${svlogger}" "$@"

保存并赋予该脚本执行权限:

chmod +x $PREFIX/var/service/test_ato/log/run

至此,我们已经创建了一个自启动服务。服务的输出日志将重定向到$PREFIX/var/log/sv/<服务名>目录下。

接下来,我们可以通过将test_ato这个服务设为自启动,从而test_ato/run自启动,又因为run内容就是启动~/test/test.sh这个脚本,所以相当于~/test/test.sh设为自启动服务

sv-enable test_ato

重启Termux应用后,test.sh将自动运行。我们可以查看日志文件cat $PREFIX/var/log/sv/test_ato/current,可以看到服务已经开始稳定地输出日志信息了。

这样,我们就可以根据这个模板来编写自己所需的一个服务了。你可以把启动其他的软件逻辑一股脑写入~/test/test.sh中

需要多个服务并设置守护进程怎么办呢

按照上面的步骤创建多个$PREFIX/var/service//run 然后sv-enable <PKG123>即可

上面这个显示原生软件支持列表,意味着不用手动的创建/run,重启termux加载以下termux-server服务后,sv-enable mysqld 即可

其实两种方法折腾程度差不多,但是sv-enable有守护进程,可以保证服务的运行,尤其是网站服务,数据库、php-fpm、nginx,心、肝、肺停一个都运行不了

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

方法三:termux-boot

文档

Termux:Boot 是一个 Termux 的插件应用,它可以帮助你在设备开机时自动运行脚本。以下是使用 Termux:Boot 的详细步骤:

安装

F-Droid 下载并安装 Termux:Boot 应用。请注意,不要在 Google Play 和 F-Droid 之间混合安装 Termux 和 Addons 应用,因为它们使用不同的签名密钥,会导致兼容性问题。

使用

在 Android 设置中,关闭对 Termux 和 Termux:Boot 应用的电池优化。

启动 Termux:Boot 应用,点击应用图标运行一次。这将允许应用在开机时自动运行。

创建 ~/.termux/boot/ 目录:将你想要在开机时执行的脚本放在 ~/.termux/boot/ 目录下。如果有多个脚本文件,它们将按照排序顺序执行。

为了防止设备休眠,建议在脚本的开头使用 termux-wake-lock 命令。

例如,如果你想在开机时启动一个 sshd 服务器并防止设备休眠,你可以创建 ~/.termux/boot/start-sshd 文件,内容如下:

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
sshd

又例如,手机开机,运行vscode

#!/data/data/com.termux/files/usr/bin/sh
termux-wake-lock
code-server

还可以手机开机自动内网穿透(安装修改的ROM,配合cloudflare tunnel内网穿透,就可以实现手机有电有网就可以远程连接了,当vps)

完成以上步骤后,重新启动你的设备。在设备开机时,Termux:Boot 应用将自动运行 ~/.termux/boot/ 目录下的脚本文件。

{lamp/}

总结

  • 在Termux中实现服务自启动的方法有多种,本文介绍了3种常用的方法:
  • 使用~/.bashrc文件:通过在~/.bashrc文件中添加启动服务的命令,可以在每次启动Termux一股脑自动执行这些命令来启动服务。这种方法简单直接,适合少量的自启动服务。
  • 使用termux-services:通过创建相应的service文件,并使用termux-service命令管理这些service文件,可以实现服务的自启动和管理。这种方法更灵活和方便,支持同时自启动多个服务,同时有进程守护。
  • 使用Termux:Boot应用:Termux:Boot是一个独立的应用程序,可以让Termux在设备启动时自动运行。通过在~/.termux/boot/目录下创建脚本文件,并在脚本中添加需要自启动的命令,可以在设备启动时自动执行这些脚本,从而实现服务的自启动。这种方法可以在设备启动时自动运行多个脚本。

希望本文对使用Termux的小伙伴们有所帮助,如果有任何问题或建议,请随时留言交流。谢谢阅读!

分类: 网络工具搞机 标签: 暂无标签

评论

全部评论 1

  1. zimo
    zimo
    Google Chrome Windows 10
    f

目录