在systemd服务中使用用户的.bashrc

7 linux bash shell ubuntu ubuntu-16.04

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

source /home/user/.bashrc在脚本中不起作用,并且systemd种子不支持源功能。帮我

Cha*_*ffy 11

如果你必须...

让外壳程序执行启动脚本,然后执行命令,而不是尝试生成EnvironmentFile 。这避免了可能导致不匹配的步骤(例如,在如何env存储环境与systemd EnvironmentFile选项如何加载环境之间)。


要获取目标用户的启动脚本,请执行以下操作:

[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -l -c 'exec "$@"' _ your-command arg1 arg2 ...
Run Code Online (Sandbox Code Playgroud)

要获取任意文件:

在这里,bash -l我们显式地使用source $0并传递/home/user/.bashrc该位置,而不是用来运行登录外壳。

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

但是不要。真。

  • .bashrc文件通常用于设置交互式环境。这意味着它们的设置通常不适用于服务。
  • 构建一个单独EnvironmentFile的服务以供您手动审核,这意味着您可以确切了解服务的运行方式,并且可以与交互式环境分开进行配置。如果您手工审核过环境文件在由Shell执行时具有相同的含义,那么您也可以set -a; source /path/to/your-environment-file; set +a在其中运行以.bashrc获取其环境变量。
  • 从安全角度来看,让服务修改其运行的任何可执行代码通常是不明智的-提供此类权限意味着即使没有任何二级特权升级攻击,破坏了服务的攻击者也可以使其破坏持续存在。因此,EnvironmentFile在用户不可写的位置使用,/etc/conf.d比在该用户的主目录下的点文件更安全。