在系统服务中使用用户的.bashrc [英] Using a user's .bashrc in a systemd service
本文介绍了在系统服务中使用用户的.bashrc的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
source /home/user/.bashrc
在脚本中不起作用,并且系统种子不支持源函数。
帮帮我
推荐答案
如果必须...
不是尝试生成环境文件,而是让一个外壳执行您的启动脚本,然后然后执行您的命令。这避免了可能导致不匹配的步骤(例如env
存储您的环境的方式与系统dEnvironmentFile
选项加载环境的方式之间的不匹配)。
要获取目标用户的启动脚本:
[Service]
Type=simple
User=user
Group=user
ExecStart=/bin/bash -l -c 'exec "$@"' _ your-command arg1 arg2 ...
创建任意文件:
在这里,我们不是使用bash -l
来运行登录外壳,而是显式地获取$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
意味着您确切地知道该服务正在运行的,并且可以从交互环境中单独配置它。如果您手动审核了环境文件,使其在由外壳执行时具有相同含义,则还可以在中运行以拉入其环境变量。 - 从安全角度来看,让服务修改它运行的任何可执行代码通常是不明智的--提供这样的权限意味着,破坏服务的攻击者可以使他们的违规持续存在,即使没有任何二次权限提升攻击。因此,在
/etc/conf.d
这样的非用户可写位置使用EnvironmentFile
比使用该用户主目录下的点文件更安全。
这篇关于在系统服务中使用用户的.bashrc的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文