Linux 使用用户';systemd服务中的s.bashrc

Linux 使用用户';systemd服务中的s.bashrc,linux,bash,shell,ubuntu,ubuntu-16.04,Linux,Bash,Shell,Ubuntu,Ubuntu 16.04,我正在为我的脚本使用systemd服务 我需要从home/user/.bashrc设置环境变量 source/home/user/.bashrc不在脚本中工作,systemd seed不支持寻源功能。 如果必须的话,请帮助我。。。 与其尝试生成环境文件,不如让shell执行启动脚本,然后执行命令。这避免了可能导致不匹配的步骤(例如env如何存储环境,以及systemdEnvironmentFile选项如何加载环境) 要获取目标用户启动脚本的源代码,请执行以下操作: 要生成任意文件,请执行以下

我正在为我的脚本使用systemd服务 我需要从home/user/.bashrc设置环境变量

source/home/user/.bashrc
不在脚本中工作,systemd seed不支持寻源功能。 如果必须的话,请帮助我。。。 与其尝试生成环境文件,不如让shell执行启动脚本,然后执行命令。这避免了可能导致不匹配的步骤(例如
env
如何存储环境,以及systemd
EnvironmentFile
选项如何加载环境)


要获取目标用户启动脚本的源代码,请执行以下操作:
要生成任意文件,请执行以下操作: 在这里,我们没有使用
bash-l
来运行登录shell,而是显式地从
$0
获取源代码,并在该位置传递
/home/user/.bashrc

[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -c '. "$0" && exec "$@"' /home/user/.bashrc your-command arg1 arg2 ...

但是不要。真正地
  • .bashrc
    文件通常用于设置交互式环境。这意味着它们的设置通常不适用于服务
  • 为您的服务构建一个单独的
    环境文件
    ,这意味着您确切地知道服务运行时使用的是什么,并且可以将其与交互环境分开配置。如果您手工审核了EnvironmentFile,使其在由shell执行时具有相同的含义,那么还可以运行
    set-a;source/path/to/your环境文件;在
    .bashrc
    中设置+a
    ,将其环境变量拉入
  • 从安全角度来看,让服务修改其运行的任何可执行代码通常是不明智的——提供此类权限意味着违反服务的攻击者可以使其违反行为持续存在,即使没有任何二级权限提升攻击。因此,在非用户可写位置(如
    /etc/conf.d
    中使用
    环境文件
    )比该用户主目录下的点文件更安全

你为什么要使用
.bashrc
而不是环境文件?我使用在用户终端上工作的命令当我使用命令时,他们说我找不到路径,我在bashrc中导出的一些变量需要我的命令。请检查哦,看起来很简单,让我检查它是否工作;)谢谢你,查理好吧,查尔斯,你看起来比我好得多,我会试试你的建议
[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -c '. "$0" && exec "$@"' /home/user/.bashrc your-command arg1 arg2 ...