RedmiNote7+Termux服务器改造方案并部署博客
生命的意义在于折腾
在一个无聊的下午,翻出了早已退休的redminote7pro。秉承着老同志继续发光发热的想法,在对deekseek进行几天友好互动后,于是有了这篇文章。
为手机配置 Linux环境
在安卓手机上运行完整 Linux 有几种主流方案,核心区别在于是否需要高版本系统、Root权限以及对性能的追求 。下面这个表格能帮你快速了解并选择:
方案 核心特点 是否需要 Root 适合谁 🔗 利用 Android 16 原生功能 系统级支持,性能好,设置简单 否 手机已升级到 Android 16 ,追求稳定和较好性能的用户 🐧 Termux + 发行版 最通用、资源多,可安装完整发行版和图形桌面 否 绝大多数用户 的首选,想灵活尝试不同Linux发行版🖥️ LocalDesktop 等一键工具 安装配置简化,侧重桌面体验 否 希望快速获得Linux桌面环境,不想手动敲命令的用户 ⚙️ 高级方案 (如 Linux Deploy) 功能最完整,性能潜力高 是 拥有已Root设备,追求极致性能和完整控制的进阶用户
使用 Termux 安装linux环境(最通用、最灵活)
经过几天的折腾发现还是termux方便,虽然不能运行完整的linux环境,但是能满足90%的需要
这是目前最受欢迎的方式,无需Root,适用于绝大多数安卓手机(系统要求通常为 Android 7.0 以上 )。
Termux 使用 apt 和 dpkg 进行包管理,类似于 Ubuntu 或 Debian。 (网页翻译)
Termux是一个在Android系统中内置了Linux环境的软件
Termux官网:https://termux.dev/
Termux下载地址(GitHub):https://github.com/termux/termux-app/releases
Termux下载地址(F-Droid):https://f-droid.org/en/packages/com.termux/
局限性
Termux 不支持使用 Debian、Ubuntu 及其他 Linux 发行版仓库的软件包。因此,不要尝试将这些文件放入你的sources.list或手动安装.deb文件。请参见“与Linux的区别 ”以了解原因。
root权限不完整,docker、宝塔以及一些需要root权限的工具无法正常运行
额外限制:
目前只支持单一架构。你不能同时安装64位和32位包。 root地址下的apt使用被限制,以防止Android /data分区的所有权和SELinux标签出错。 不支持降级。为了回收磁盘空间,我们不保存包版本的历史记录。 使用包管理器
强烈建议使用公用事业,而不是直接使用。它是一个包装程序,执行多种任务:pkg``apt
提供命令快捷键。用“pkg in”代替“pkg install”或“apt install”。 如果需要安装包,会自动运行“apt update”。 通过定期自动切换镜像,实现客户端仓库的负载均衡。*这对于防止我们达到托管配额上限非常重要。*安装新软件包: 1
pkg install package-name
强烈建议在安装新软件包前先升级现有软件包。您可以通过执行以下命令安装更新:
此外,我们建议至少每周查看一次更新。否则在安装软件包或升级过程中,存在一定风险会遇到问题。
移除已安装的软件包:
1
pkg uninstall package-name
这会移除包,但修改后的配置文件会保留。如果你想去除它们,就用它代替。apt purge
以下为更多支持的命令:
指挥 描述 pkg autoclean从缓存中移除过时的 .deb 文件。 pkg clean从缓存中移除所有.deb文件。 pkg files <package>列出按指定包安装的文件。 pkg list-all列出所有可用的套餐。 pkg list-installed列出当前安装的软件包。 pkg reinstall <package>重新安装指定的包。 pkg search <query>按查询搜索包裹。 pkg show <package>显示具体包裹的信息。
官方资料库
主 Termux 仓库可通过 https://packages.termux.org/apt/termux-main/ 访问。
我们有一些可选的仓库,提供特定主题的内容,可以通过安装名称以 . 结尾的包来启用。-repo
当前可选仓库列表:
我们官方仓库的软件包由位于 github.com/termux/ 的脚本构建,并由 Termux 开发团队 成员维护和签署。用于验证签名的公钥包含在包中。关于仓库如何签名的更多信息,请参见 termux-keyring 。termux-keyring
Termux apt 仓库的镜像是可用的。在 Github 上查看最新的相关信息。
你可以用效用来选镜像。termux-change-repo
其他包管理器
有些编程语言有自己的包管理器。由于在构建环境中交叉编译时存在问题,我们通常不会用这些软件打包可安装内容。
Termux基础配置
打开Termux,换源
我们在使用 pkg update 的时候会发现pkg官方源比较慢,所以我们可以更换国内的其他源
例如:这里更换了清华源
输入:
1
2
3
4
5
6
#清华源
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX /etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX /etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX /etc/apt/sources.list.d/science.list
apt update && apt upgrade
更新pkg
1
2
3
pkg update
pkg upgrade -y
pkg install openssh -y
后面就一路回车就行
设置登录密码(重要!)
在Termux中,修改用户名有几种方法,但需要注意Termux用户名由Android系统UID自动生成 ,直接修改可能会影响应用权限和文件所有权。
Termux默认无密码,必须设置:
1
2
# 设置密码(输入时不会显示字符)
passwd
按提示输入两次密码(建议设置强度较高的密码)。
获取手机在局域网的IP地址
1
ip addr show | grep inet
在输出中寻找wlan0(Wi-Fi)的IP,格式为192.168.x.x或10.x.x.x。记下这个IP。
或使用更简单命令:
1
2
ifconfig wlan0
# 如果ifconfig不可用,安装net-tools:pkg install net-tools -y
启动SSH服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 默认端口8022(避免与系统22端口冲突)
sshd -p 8022
#远程连接
ssh u0_a123@192.168.1.100 -p 8022
# 检查SSH进程
ps aux | grep sshd
# 检查端口监听状态
netstat -tulpn | grep :2222
# 或使用更简洁的命令
ss -tlnp | grep :2222
查看防火墙状态
1
2
3
4
5
6
7
8
9
10
11
# 安装防火墙工具
pkg install iptables -y
# 查看规则
iptables -L -n -v
# 允许新SSH端口
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
# 保存规则(需要Root)
iptables-save > /data/data/com.termux/files/home/iptables.rules
到这时候,你已经完成了linux运行环境的搭建
网站环境配置(wordpress,typecho)
安装数据库(mariadb)
MariaDB 是由社区开发、商业支持的 MySQL 关系数据库管理系统的分支。
安装包
安装包“mariadb”:
安装应该不会出错。如果发生了错误,你可能需要在 Github 上报告问题。
关键目录配置
由于Termux的文件系统布局特殊,需要为MariaDB建立合适的数据目录并设置权限:
1
2
mkdir -p ~/mariadb_data
mariadb-install-db --datadir=$HOME/mariadb_data --srcdir=$PREFIX --auth-root-authentication-method=normal
此命令会初始化数据库系统文件到 ~/mariadb_data 目录。
3. 启动MariaDB服务
在Termux中,你需要通过命令行手动启动mysqld(MySQL/MariaDB服务进程):
1
mysqld_safe --datadir=$HOME/mysql_data --socket=$PREFIX/tmp/mysql.sock &
启动后,可以运行 pgrep mysqld 来检查服务是否在后台运行。
上述命令还会初始化数据库,使用两个全权限账户 (可能在MariaDB 10.4.x中引入)。第一个是“root”,无法访问,第二个是你的 Termux 用户名(用命令或 Check)。id -un``whoami
要启用root账户访问权限,你需要用你的Termux用户名登录
并手动更改root密码
设置root密码并运行安全脚本
首先以无需密码的方式登录,然后修改root用户的密码(将 你的新密码 替换为强密码):
1
2
3
4
5
6
7
8
9
10
11
mysql -u root --socket=$PREFIX/tmp/mysql.sock
# 进入MySQL命令行后,执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
EXIT;
#之后,可以运行 mysql_secure_installation 来进行其他安全设置(如移除匿名用户等),但请注意,在Termux中运行此脚本可能会因环境差异报错,手动执行上述ALTER USER命令设置密码是更可靠的方法。
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit;
确认你能用 Root登录。你需要提供前一步设置的密码。 mysql -u root -p
常用SQL命令速查表
类别 命令示例 说明 数据库操作 CREATE DATABASE数据库名;创建新数据库。 SHOW DATABASES;列出所有数据库。 USE数据库名;切换到指定数据库(后续操作在该库中进行)。 DROP DATABASE数据库名;删除 数据库(不可逆! )。用户与权限 CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';创建新用户(localhost指仅限本地连接)。 GRANT ALL PRIVILEGES ON数据库名.* TO '用户名'@'localhost';授予用户对某个数据库的所有权限。 FLUSH PRIVILEGES;刷新权限,使授权更改立即生效 。 SHOW GRANTS FOR '用户名'@'localhost';查看用户的权限。 表操作 SHOW TABLES;显示当前数据库中的所有表。 DESCRIBE表名; 或 DESC表名;查看表的结构(有哪些字段)。 CREATE TABLE表名(id INT, name VARCHAR(100));创建新表。 DROP TABLE表名;删除 表(不可逆! )。数据操作 (CRUD) INSERT INTO表名(字段1, 字段2) VALUES ('值1', '值2');插入新数据。 SELECT * FROM表名;查询表中所有 数据。 SELECT字段1,字段2FROM表名WHERE 条件;带条件查询特定字段。 UPDATE表名SET 字段1='新值' WHERE 条件;更新数据(务必用WHERE ,否则更新全表)。 DELETE FROM表名WHERE 条件;删除数据(务必用WHERE ,否则清空全表)。 维护与优化 OPTIMIZE TABLE表名;优化表,释放空间(尤其适用于WordPress)。 SHOW PROCESSLIST;显示当前正在执行的所有连接/查询。 KILL进程ID;终止某个耗时的查询(从SHOW PROCESSLIST;获取ID)。 EXIT; 或 \q退出MariaDB命令行客户端。
使用 package
每当你想通过命令行或某个程序(网页应用)手动访问MySQL数据库时,你需要启动MySQL服务器:
然后你应该能够连接到数据库,例如用 。mysql -u root -p
为WordPress创建专用数据库和用户
重新使用密码登录,并为WordPress创建一个专用的数据库和用户(请务必替换 wordpress_user 和 user_password):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mariadb - u root - p --socket=$PREFIX/tmp/mysql.sock
-- 1. 创建数据库
CREATE DATABASE my_blog_db ;
-- 2. 创建用户并设置密码
CREATE USER 'blog_admin' @ 'localhost' IDENTIFIED BY 'StrongPassword123!' ;
-- 3. 授予用户对新数据库的所有权限
GRANT ALL PRIVILEGES ON my_blog_db . * TO 'blog_admin' @ 'localhost' ;
-- 4. 刷新权限
FLUSH PRIVILEGES ;
-- 5. 切换到新数据库
USE my_blog_db ;
-- 接下来就可以在此数据库内创建表了
EXIT ;
安装配置nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#安装
pkg install nginx
#检查配置文件是否正常
nginx -t
#启动
nginx
#Termux 在 Nginx 上默认运行的端口号是 8080
#可以使用pgrep查看nginx的进程pid号:
pgrep nginx
#直接打开浏览器访问:
http://127.0.0.1:8080
#重启nginx
nginx -s reload
#停止nginx
#以nginx提供的原生方法:
nginx -s stop #直接停止
nginx -s quit #完成已经接受的请求,然后退出。
#杀死进程
kill -9 ` pgrep nginx`
# 查询 nginx 进程相关的 PID 号
pgrep nginx
# 杀掉 查询出的 PID号进程
kill -9 PID
配置nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#配置nginx
vim $PREFIX /etc/nginx/nginx.conf
~ $ cat $PREFIX /etc/nginx/nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8080;
server_name localhost;
#access_log logs/host.access.log main;
location / {
root /data/data/com.termux/files/usr/share/nginx/html;
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /data/data/com.termux/files/usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .*\. php( \/ .*) *$ {
#root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/data/com.termux/files/usr/share/nginx/html$fastcgi_script_name ;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root /data/data/com.termux/files/usr/share/nginx/html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root /data/data/com.termux/files/usr/share/nginx/html;
# index index.html index.htm;
# }
#}
}
~ $
1.添加 index.php 到默认首页的规则里面
2.取消 location ~ .php$ 这些注释,改成图片上面的样子:
Termux 里面的 Nginx 默认网站的根目为:/data/data/com.termux/files/usr/share/nginx/html
如果想要修改默认路径的话 只需要在上图配置文件中 替换2处出现的这个路径即可。
安装php-fpm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pkg install php
pkg install php-fpm
# 安装WordPress必需的PHP扩展(如果尚未安装)
pkg install php-mysqli php-gd php-curl php-xml php-mbstring php-intl php-apache -y
#编辑 php-fpm 的配置文件www.conf
vim $PREFIX /etc/php-fpm.d/www.conf
#定位搜索 listen = 找到
listen = /data/data/com.termux/files/usr/var/run/php-fpm.sock
#改为:
listen = 127.0.0.1:9000
#测试php解析
#需要先完成nginx和php-fpm的安装和配置
#在这个网站根目录下:
/data/data/com.termux/files/usr/share/nginx/html
#创建一个简单的PHP信息页来测试, 内容为:
echo "<?php phpinfo(); ?>" > $PREFIX /share/nginx/html/info.php
先启动php-fpm,然后启动nginx,如果你的 Nginx 已经启动了的话,使用 nginx -s reload 重启 Nginx.
1
http://[ip地址]:8080/info.php
正式开始搭建wordpress
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#新建数据库
mysql -uroot -p[密码] -e"create database wordpress;show databases;"
#装一个unzip
pkg install unzip wget
#启动数据库
nohup mysqld &
# wget 下载
wget https://cn.wordpress.org/wordpress-5.4-zh_CN.zip
# unzip 解压 没有安装unzip请自行安装
unzip wordpress-4.9.4-zh_CN.zip
# 将解压的文件夹移动到 nginx 网站根目录下
mv wordpress/ $PREFIX/share/nginx/html
安装wordpress,typecho(emblog,z-blog安装方式相似不再赘述)
1
2
3
#将解压的文件夹移动到 nginx 网站根目录下
mv typecho/ $PREFIX /share/nginx/html
mv wordpress/ $PREFIX /share/nginx/html
浏览器访问: http://127/.0.0.1/wordpress/进行 WordPress 的安装
浏览器访问: http://127/.0.0.1/typecho进行 WordPress 的安装
安装halo
在 Termux 上使用 JAR 包和 JDK 21 运行 Halo,并结合您已有的 MariaDB 数据库.
可以分为以下几个核心步骤:环境准备、数据库配置、Halo 配置、启动与访问。
第一步:环境准备
验证 Java 环境 :确保 JDK 21 已安装并可用。
如果输出包含 openjdk version "21",则说明正确。
创建工作目录 :创建一个独立的目录来存放 Halo 的配置文件和数据,便于管理。
1
mkdir -p ~/halo && cd ~/halo
移动 JAR 包 :将您下载的 halo.jar 文件移动到刚创建的 ~/halo 目录下。
1
2
# 假设你的jar包下载在 ~/downloads 目录,请根据实际情况修改路径
mv ~/下载/halo.jar ~/halo/
第二步:数据库配置 (MariaDB)
您已创建了数据库和用户,但建议再确认一次其存在性和权限是否正确。
使用 root 用户登录数据库:1
mariadb -u root -p --socket= $PREFIX /tmp/mysql.sock
执行以下 SQL 命令进行确认和修正(请直接复制执行):1
2
3
4
5
6
7
8
9
-- 检查数据库和用户
SHOW DATABASES LIKE 'halo' ;
SELECT User , Host FROM mysql . user WHERE User = 'halo' ;
-- 如果用户不存在,则创建(请使用您指定的密码)
CREATE USER IF NOT EXISTS 'halo' @ 'localhost' IDENTIFIED BY '123456z.' ;
-- 授予权限(如果之前未执行)
GRANT ALL PRIVILEGES ON halo . * TO 'halo' @ 'localhost' ;
FLUSH PRIVILEGES ;
EXIT ;
第三步:创建 Halo 配置文件
这是最关键的一步。Halo 通过 application.yaml 文件连接数据库。
在 ~/halo 目录下创建配置文件:1
nano ~/halo/application.yaml
将以下配置内容粘贴到文件中。请特别注意 socket 参数,这是 Termux 环境下连接 MariaDB 的关键 : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
~/.halo2 $ cat application.yaml
server :
# 运行端口
port : 8090
spring :
# 数据库配置,支持 MySQL、MariaDB、PostgreSQL、H2 Database,具体配置方式可以参考下面的数据库配置
r2dbc :
url : r2dbc:mariadb://localhost/halo?localSocket=/data/data/com.termux/files/usr/tmp/mysql.sock&useUnicode=true&characterEncoding=utf8mb4&useServerPrepStmts=false
username : halo
password : "123456z."
sql :
init :
mode : always
# 需要配合 r2dbc 的配置进行改动
platform : mariadb
halo :
# 工作目录位置
work-dir : ${user.home}/.halo2
# 外部访问地址
external-url : http://localhost:8090
# 附件映射配置,通常用于迁移场景
attachment :
resource-mappings :
- pathPattern : /upload/**
locations :
- migrate-from-1.x~/.halo2 $
保存并退出编辑器 (Ctrl+X -> Y -> Enter)。 第四步:启动 Halo
在 ~/halo 目录下,使用以下命令启动 Halo:
1
cd ~/halo && nohup java -Dfile.encoding= UTF-8 -jar halo.jar --spring.config.additional-location= optional:file:" $HOME " /.halo2/ > halo.
启动参数说明 :
-jar halo.jar:指定运行的 JAR 包。首次启动会看到初始化日志,并在最后输出 Halo 初始化完成,访问地址:http://IP:8090 之类的信息。 首次启动时间可能稍长(1-2分钟),因为会初始化数据库表。 第五步:访问并初始化 Halo
在手机浏览器或同一局域网的电脑浏览器中访问:手机本地 :http://localhost:8090局域网电脑 :http://你的手机IP:8090 首次访问会进入初始化页面,设置你的站点名称、管理员邮箱和密码 (这是登录 Halo 管理后台的账号,与数据库用户 halo 无关)。 设置完成后,即可进入 Halo 管理后台 (http://IP:8090/admin) 开始使用。 ⚠️ 重要提醒与优化
后台运行与自启动 :开机自启动脚本
一个开机自启动脚本(检测服务状态是否启动,如果没有启动则重新启动)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
~ $ cat .bashrc
# ===== 服务自启动与状态检查脚本 (增强版) =====
# 等待系统初始化完成
sleep 6
echo "=== [ $( date '+%Y-%m-%d %H:%M:%S' ) ] RedmiNote 7 Pro已启动,正在检测wordpress与halo相关服务 ==="
# 1. 启动 SSH 服务 (端口 8022)
if pgrep -f "sshd.*8022" > /dev/null; then
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] SSH 服务已在运行。"
else
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] 启动 SSH 服务..."
sshd -p 8022 > /dev/null 2>& 1 &
fi
# 2. 启动 MariaDB 数据库
if pgrep mariadbd > /dev/null; then
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] MariaDB 已在运行。"
else
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] 启动 MariaDB..."
nohup mysqld_safe --datadir= /data/data/com.termux/files/home/mysql_data --socket= /data/data/com.termux/files/usr/tmp/mysql.sock > /de v/null 2>& 1 &
sleep 3 # 给数据库更长的启动时间
fi
# 3. 启动 PHP-FPM (检查master进程)
if pgrep -f "php-fpm: master" > /dev/null; then
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] PHP-FPM 已在运行。"
else
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] 启动 PHP-FPM..."
php-fpm > /dev/null 2>& 1 &
sleep 3
fi
# 4. 启动 Halo 博客系统
if pgrep -f "halo.jar" > /dev/null; then
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] Halo 已在运行。"
else
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] 启动 Halo..."
cd ~/halo && nohup java -Dfile.encoding= UTF-8 -jar halo.jar --spring.config.additional-location= optional:file:" $HOME " /.halo2/ > halo. log 2>& 1 &
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] Halo 启动命令已执行,日志输出至 ~/halo/halo.log"
sleep 5 # 给Java应用充分的初始化时间
fi
# 5. 启动 Nginx (修正版 - 使用模糊匹配)
if pgrep "nginx" > /dev/null; then
NGINX_PID = $( pgrep "nginx" | head -1)
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] Nginx 已在运行 (主进程 PID: $NGINX_PID )。"
else
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] Nginx 未运行,正在启动..."
nginx 2>/dev/null
# 等待并检查启动结果
sleep 3
if pgrep "nginx" > /dev/null; then
NGINX_PID = $( pgrep "nginx" | head -1)
NGINX_COUNT = $( pgrep "nginx" | wc -l)
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] Nginx 启动成功 (主进程 PID: $NGINX_PID ,共 $NGINX_COUNT 个进程)。"
else
echo "[ $( date '+%Y-%m-%d %H:%M:%S' ) ] Nginx 启动失败,请检查配置或端口冲突。"
fi
fi
# 6. 最终状态检查
echo
echo "=== [ $( date '+%Y-%m-%d %H:%M:%S' ) ] 服务运行状态检查 ==="
# 检查SSH
if pgrep -f "sshd.*8022" > /dev/null; then
echo "[ ✓ ] SSH (端口8022) 正在运行。"
else
echo "[ ✗ ] SSH 未运行!"
fi
# 检查MariaDB
if pgrep "mariadbd" > /dev/null; then
echo "[ ✓ ] MariaDB 正在运行。"
else
echo "[ ✗ ] MariaDB 未运行!"
fi
# 检查PHP-FPM
if pgrep -f "php-fpm: master" > /dev/null; then
echo "[ ✓ ] PHP-FPM 正在运行。"
else
echo "[ ✗ ] PHP-FPM 未运行!"
fi
# 检查Halo
if pgrep -f "halo.jar" > /dev/null; then
HALO_PID = $( pgrep -f "halo.jar" )
echo "[ ✓ ] Halo (PID: $HALO_PID ) 正在运行。"
else
echo "[ ✗ ] Halo 未运行!"
fi
# 检查Nginx
if pgrep "nginx" > /dev/null; then
NGINX_PID = $( pgrep "nginx" )
echo "[ ✓ ] Nginx (PID: $NGINX_PID ) 正在运行。"
else
echo "[ ✗ ] Nginx 未运行!"
fi
echo "====================================="
# ===== 脚本结束 =====
~ $
~ $