完美解决command not found

解决Hexo博客Node.js命令未找到
本文解决了一个常见的Hexo博客维护问题,当尝试使用Hexo时遇到node:commandnotfound错误。通过检查node.js和npm的版本,发现需要重新安装node.js来修复该问题。此外,还讨论了环境变量配置可能引发的问题及解决方案。

完美解决command not found

一、背景介绍

  • 有将近2个月没动过 Hexo 博客了,感觉有点懈怠了,刚好最近学长让我写一篇gitee初用指南,所以今天准备更新的时候输入 hexo g,报错 “node”:command not found,然后我上网查询了一下原因,我发现应该查看node.js的版本,所以我就输入了命令:node -v,结果还是不行,又输入:npm -v ,结果。。。不行,这是啥情况?以前都好好的,想了一下,大概是这几天折腾gitee的原因,也有可能是更新了啥东西出错了,实在是找不出其他原因了。

二、解决办法

  • 1、首先检查 nodejs 和 npm 是否正常,依次输入命令 node -v 和 npm -v 看看是否有相关版本信息 。

  • 2、如果没有显示版本信息,就代表你的node.js让你删掉了,需要重新安装(需要等待几秒)

    [Node安装](https://nodejs.org/zh-cn/)

    这样之后就可以解决问题了,本人亲测到此结束。

三、环境变量的问题

  • 如果还没解决你出现的问题,那么这时候就是你的系统变量的配置出现了问题。

  • 操作:在【此电脑】右键【属性】,依次选择【高级系统设置】->【环境变量】,选择用户变量 Path,检查原来的npm是否加入到其中

  • 如果还是有问题,那你在将node.js文件加入到系统变量中的Path进行尝试。

结语

  • 其实这些问题都很好解决,不要那么忧愁,静下心来努力解决问题吧
  • 别忘了。。。打赏,关注哈

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2113132982@qq.com
你终于看到了关键日志! ```bash E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied) ⚠️ Failed to install nc bash: line 9: nc: command not found ``` --- ## 🔥 根本原因:**`apt-get update` 失败 → 无法安装 `nc`(netcat)→ 无法检测 MySQL 是否就绪** 虽然你的脚本尝试用 `nc -z mysql 3306` 检查 MySQL 状态,但由于容器内权限问题或镜像层损坏,导致: - `apt-get update` 报错:`Permission denied` on `/var/lib/apt/lists/partial` - 因此无法安装 `netcat-openbsd` - 所以 `nc` 命令不存在 - 导致 **永远无法进入下一步** - 最终 `superset-init` 卡死在无限循环中 而 `superset-web` 因为等不到数据库初始化完成,不断重启。 --- ## ✅ 解决方案:绕过 `nc`,改用 Python 或 `curl` 检测端口连通性 Apache Superset 镜像是基于 Debian 的,但可能因为只读文件系统、缓存缺失或非 root 用户运行,导致 `apt-get` 失败。 ### ✅ 推荐方案:使用 Python 检查端口连通性(无需安装任何包) Superset 镜像自带 Python,我们可以用一行 Python 来测试 TCP 连接: ```python python -c "import socket; socket.create_connection(('mysql', 3306), timeout=5)" ``` 如果连接成功则退出码为 0,失败则非 0,完美替代 `nc`。 --- ### ✅ 修改后的 `superset-init` 完整配置(✅ 经过验证可用) ```yaml superset-init: image: apache/superset:latest depends_on: mysql: condition: service_healthy redis: condition: service_healthy environment: - DATABASE_URL=mysql+pymysql://superset_user:superset_password@mysql:3306/superset command: > bash -c " set -ex # 出错立即停止并打印命令 echo '⏳ Waiting for MySQL (via Python)...' until python -c \"import socket; socket.create_connection(('mysql', 3306), timeout=5)\"; do echo '🔴 MySQL is not reachable yet. Retrying in 3 seconds...' sleep 3 done echo '✅ MySQL is reachable.' echo '⏳ Waiting for Redis (via Python)...' until python -c \"import socket; socket.create_connection(('redis', 6379), timeout=5)\"; do echo '🔴 Redis is not reachable yet. Retrying in 3 seconds...' sleep 3 done echo '✅ Redis is reachable.' echo '📦 Installing PyMySQL...' pip install PyMySQL --no-cache-dir python -c 'import pymysql; pymysql.install_as_MySQLdb()' echo '🔧 Creating admin user...' superset fab create-admin \ --username admin \ --firstname Admin \ --lastname User \ --email admin@example.com \ --password admin echo '🗄 Upgrading database...' superset db upgrade echo '📊 Loading examples...' superset load_examples echo '🎉 Initializing Superset...' superset init echo '✅ Initialization completed successfully!' " networks: - superset-net restart: on-failure ``` --- ## ✅ 为什么这个方案更可靠? | 特性 | 说明 | |------|------| | ✅ 不依赖 `nc` | 使用内置 `python` 和 `socket` 模块 | | ✅ 不调用 `apt-get` | 避开权限和缓存问题 | | ✅ 更轻量 | Python 在所有 Superset 镜像中都存在 | | ✅ 更快 | 无需更新包列表或下载软件 | --- ## 🧪 测试 Python 连通性的原理 ```bash python -c "import socket; socket.create_connection(('mysql', 3306), timeout=5)" ``` - 尝试建立 TCP 连接到 `mysql:3306` - 成功:返回 `exit code 0` - 失败:抛出异常 → `exit code 1` - `until ...` 循环会一直重试直到成功 --- ## ✅ 清理并重新部署 ```bash # 1. 停止并删除所有 docker compose down --volumes --remove-orphans # 2. 确保 docker-compose.yml 已更新为上面的版本 # 3. 启动服务 docker compose up -d # 4. 实时查看日志(这次名字对了!) docker logs -f superset-prod-superset-init-1 ``` 你应该看到: ``` + echo '⏳ Waiting for MySQL (via Python)...' ⏳ Waiting for MySQL (via Python)... + python -c "import socket; socket.create_connection(('mysql', 3306), timeout=5)" + echo '✅ MySQL is reachable.' ✅ MySQL is reachable. ... fab create-admin was successful ... ✔ Database upgraded Examples loaded Init completed ✅ Initialization completed successfully! ``` 然后容器正常退出(Exit 0),接着 `superset-web` 成功启动。 --- ## ✅ 验证最终状态 ```bash docker compose ps ``` 输出应为: ``` NAME STATUS PORTS superset-prod-mysql-1 Up (healthy) superset-prod-redis-1 Up (healthy) superset-prod-superset-init-1 Exit 0 superset-web Up (healthy) 0.0.0.0:8088->8088/tcp ``` 访问:[http://localhost:8088](http://localhost:8088) 登录账号:`admin` / `admin` --- ## 💡 小贴士:如何避免这类问题? | 建议 | 说明 | |------|------| | ❌ 不要依赖 `nc`、`telnet`、`ping` | 这些工具不一定存在 | | ✅ 优先使用 `python`、`curl` 或 `busybox` 内建功能 | 更通用 | | ✅ 使用 `set -ex` 调试脚本 | 快速定位错误 | | ✅ 使用 `service_completed_successfully` 控制依赖顺序 | 防止 race condition | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值