温馨提示×

centos env为何重启后丢失

小樊
50
2026-09-03 05:11:29
栏目: 智能运维

在 CentOS(以及大多数 Linux 发行版)中,环境变量(env)在重启后丢失,通常是因为设置方式不对写入的位置不正确。下面给你系统讲一下原因和正确做法。


一、为什么重启后 env 会丢失?

1️⃣ 只在当前 shell 中临时设置

export MY_VAR=123
  • 只在当前终端会话有效
  • 关闭终端 / 重启系统 → 失效

✅ 这是最常见原因


2️⃣ 写在脚本里但没被自动加载

例如:

vi test.sh
export MY_VAR=123
  • 不执行 source test.sh 就没用
  • 重启后不会自动执行

3️⃣ 写错了配置文件(或写错用户)

文件 作用范围
~/.bashrc 当前用户(交互 shell)
~/.bash_profile 当前用户(登录 shell)
/etc/profile 所有用户(登录)
/etc/bashrc 所有用户(非登录)
/etc/environment 系统级(不识别 export)

❌ 写在 /tmp/root/xxx.sh 不会自动生效


4️⃣ 使用 systemd 服务时环境不同

  • systemd 启动的服务 不会读取 bashrc / profile
  • 重启后服务拿不到你手动 export 的变量

二、CentOS 重启后永久生效的正确方式

✅ 方式一:当前用户永久生效

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

推荐方式(规范、好管理)


✅ 方式三:系统级(不推荐写 export)

vi /etc/environment

内容(不能写 export):

MY_VAR=123

⚠ 只对登录环境有效,不识别 shell 语法


✅ 方式四:systemd 服务需要的环境变量

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”,没有写入会被登录或系统自动加载的配置文件。

如果你愿意,可以告诉我:

  • 你是怎么设置的
  • 是给用户用,还是给服务用
  • CentOS 版本(7 / 8 / Stream)

我可以直接给你一份可直接用的配置

0