在 CentOS(以及大多数 Linux 发行版)中,环境变量(env)在重启后丢失,通常是因为设置方式不对或写入的位置不正确。下面给你系统讲一下原因和正确做法。
export MY_VAR=123
✅ 这是最常见原因
例如:
vi test.sh
export MY_VAR=123
source test.sh 就没用| 文件 | 作用范围 |
|---|---|
~/.bashrc |
当前用户(交互 shell) |
~/.bash_profile |
当前用户(登录 shell) |
/etc/profile |
所有用户(登录) |
/etc/bashrc |
所有用户(非登录) |
/etc/environment |
系统级(不识别 export) |
❌ 写在 /tmp、/root/xxx.sh 不会自动生效
vi ~/.bash_profile
添加:
export MY_VAR=123
保存后:
source ~/.bash_profile
vi /etc/profile.d/myenv.sh
内容:
export MY_VAR=123
赋予执行权限:
chmod +x /etc/profile.d/myenv.sh
✅ 推荐方式(规范、好管理)
vi /etc/environment
内容(不能写 export):
MY_VAR=123
⚠ 只对登录环境有效,不识别 shell 语法
vi /etc/systemd/system/xxx.service
[Service]
Environment=MY_VAR=123
然后:
systemctl daemon-reload
systemctl restart xxx
# 当前生效变量
env | grep MY_VAR
# 哪个文件定义了
grep -R "MY_VAR" /etc /root /home
CentOS 重启后 env 丢失,是因为你只是“临时 export”,没有写入会被登录或系统自动加载的配置文件。
如果你愿意,可以告诉我:
我可以直接给你一份可直接用的配置。