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

时间:2018-04-11 01:17:41

标签: linux bash shell ubuntu ubuntu-16.04

我正在为我的脚本使用systemd服务 我需要从home / user / .bashrc

设置环境值

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

1 个答案:

答案 0 :(得分:5)

如果你必须......

不要尝试生成EnvironmentFile,而是让shell执行启动脚本,然后然后执行命令。这避免了可能导致不匹配的步骤(如env存储环境的方式,以及systemd EnvironmentFile选项如何加载它。)

获取目标用户的启动脚本:

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

要获取任意文件:

此处,我们不是使用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手动审核意味着您知道完全运行该服务的内容,并且可以将其与交互式环境分开配置。 如果您已经手动审核了EnvironmentFile在shell执行时具有相同含义,您还可以在set -a; source /path/to/your-environment-file; set +a中运行.bashrc以获取其环境变量。
  • 从安全角度来看,让服务修改其运行的任何可执行代码通常是不明智的 - 提供此类权限意味着违反服务的攻击者即使没有任何辅助权限升级攻击也可以使其违规行为持久。在EnvironmentFile之类的非用户可写位置使用/etc/conf.d比在该用户主目录下的点文件更安全。