关键在“谁生效”和“怎么持久”,系统级变量用/etc/profile.d/或/etc/profile,用户级用~/.bashrc或~/.bash_profile,systemd服务必须在.service文件中用environment显式声明。

CentOS 服务器环境变量配置,关键在“谁生效”和“怎么持久”。写法本身简单,但选对位置才能让变量真正起作用——不是所有地方加了 export 都能被程序看到。
系统级环境变量(所有用户都用)
适用于 Java、Python、MySQL 等全局服务或命令路径(如 /opt/jdk/bin 或 /usr/local/mysql/bin)。推荐两种方式:
-
写进
/etc/profile.d/下的独立脚本(更规范、易管理):
新建文件/etc/profile.d/myapp.sh,内容为:export JAVA_HOME=/opt/jdk1.8.0_301export PATH=$JAVA_HOME/bin:$PATH
保存后无需重启,执行source /etc/profile即可全局生效。 -
直接追加到
/etc/profile(适合少量变量):
用sudo vi /etc/profile,末尾加一行:export PATH="/usr/local/node/bin:$PATH"
保存后同样运行source /etc/profile。
用户级环境变量(仅当前用户生效)
适合开发人员自定义工具链(如本地 Python 虚拟环境、私有 bin 目录),不影响其他用户:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
写入
~/.bashrc(推荐):
编辑~/.bashrc,末尾添加:export PYTHONPATH="/home/user/myproject/lib:$PYTHONPATH"export PATH="$HOME/.local/bin:$PATH"
然后执行source ~/.bashrc。注意:SSH 登录时默认不加载.bashrc,需确保~/.bash_profile中有source ~/.bashrc这行。 -
写入
~/.bash_profile(登录 Shell 专用):
如果只希望变量在登录时生效(比如远程 SSH 连接),可放这里,语法同上。
服务进程环境变量(systemd 服务必须显式声明)
很多后台服务(如 Spring Boot jar、Nginx、Redis)由 systemd 启动,默认不读取 shell 的 ~/.bashrc 或 /etc/profile,必须单独配置:
- 编辑服务单元文件,例如
/etc/systemd/system/myapp.service; - 在
[Service]段下添加:Environment="JAVA_HOME=/opt/jdk1.8.0_301"Environment="PATH=/opt/jdk1.8.0_301/bin:/usr/local/bin:/usr/bin:/bin" - 保存后执行:
sudo systemctl daemon-reloadsudo systemctl restart myapp
验证和调试技巧
别只靠 echo $PATH,要确认变量是否真被目标进程继承:
- 终端里查当前值:
printenv | grep -i java或echo $JAVA_HOME; - 查某进程实际环境:
cat /proc/$(pgrep -f "myapp.jar")/environ | tr '\0' '\n' | grep JAVA_HOME; - 临时测试变量:
env JAVA_HOME=/test java -version,避免污染当前会话。










