# -*- coding: utf-8 -*- r'''看服务器上装 WordPress 缺什么。 == 背景 == 用户想把 xxmxxs.top 拿来做 WordPress(原来是 Cloudflare Workers 占着)。 WordPress 要 PHP + 数据库,而服务器上现在只跑着 nginx(给遥控中转用)。 == 为什么写成文件 == 这个查询里有一堆 `$(...)`、`$b`、`2>/dev/null`。 用 `python -c "..."` 传的话,**PowerShell 会先在本机把它们求值** (报"无法将 systemctl 项识别为 cmdlet"、"未能找到路径 C:\dev\null")。 这个坑今天踩了太多次 —— 凡是超过两行的远端命令,一律写成文件。 ''' from __future__ import annotations import sys from pathlib import Path ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(ROOT / "_build")) from lssh import run # noqa: E402 REMOTE = r''' echo "==== 磁盘 ====" df -h / | tail -1 echo echo "==== 内存 ====" free -m | head -2 echo echo "==== nginx 站点 ====" ls -1 /etc/nginx/sites-enabled/ 2>/dev/null echo " server_name:" grep -rh server_name /etc/nginx/sites-enabled/ 2>/dev/null | sed 's/^/ /' echo echo "==== PHP ====" if command -v php >/dev/null 2>&1; then php -v | head -1 echo " php-fpm: $(systemctl is-active php8.3-fpm 2>/dev/null || systemctl is-active php8.2-fpm 2>/dev/null || echo 没装)" else echo " 没装 PHP" fi echo echo "==== 数据库 ====" if command -v mariadb >/dev/null 2>&1; then echo " mariadb 客户端在: $(command -v mariadb)" echo " mariadb 服务: $(systemctl is-active mariadb 2>/dev/null)" elif command -v mysql >/dev/null 2>&1; then echo " mysql 客户端在" echo " mysql 服务: $(systemctl is-active mysql 2>/dev/null)" else echo " 没装数据库" fi echo echo "==== apt 源里有 php-fpm 吗 ====" apt-cache policy php-fpm 2>/dev/null | head -3 | sed 's/^/ /' echo echo "==== 服务状态 ====" for s in nginx ykxmz-relay ykxmz-monitor.timer certbot.timer; do printf ' %-24s %s\n' "$s" "$(systemctl is-active $s 2>&1)" done echo echo "==== 证书目录 ====" ls -1 /etc/letsencrypt/live/ 2>/dev/null | sed 's/^/ /' || echo " (空)" echo echo "==== 监听端口 ====" ss -tln 2>/dev/null | grep -E ':(80|443|3306) ' | sed 's/^/ /' ''' def main() -> int: print("=" * 58) print(" 服务器 WordPress 就绪度") print("=" * 58) print() out = run(REMOTE, timeout=240, quiet=True) print(out[1] if isinstance(out, tuple) else out) return 0 if __name__ == "__main__": sys.exit(main())