即使没有真实用户,如何在我的 Linux 服务中为 Asterisk 设置环境变量?
Posted
技术标签:
【中文标题】即使没有真实用户,如何在我的 Linux 服务中为 Asterisk 设置环境变量?【英文标题】:How can I set environment variables in my Linux service for Asterisk even though it doesn't have a real user? 【发布时间】:2011-04-21 08:41:21 【问题描述】:我创建了一个作为守护进程运行的 linux 服务(并从 /etc/init.d/X 开始)。我需要设置一些应用程序可以访问的环境变量。
这是场景。该应用程序是一堆 Perl AGI 脚本,它们依赖于(因此需要以) asterisk 用户身份运行,但 asterisk 没有外壳。理想情况下,我只是在 /home/asterisk/.bashrc 中设置它,但星号不存在。
如何在星号用户的运行环境中为我的应用设置环境变量,以便我的应用可以使用它们?
【问题讨论】:
【参考方案1】:要么在启动脚本 (/etc/init.d/yourdaemon
) 中设置它们,要么在该文件中放入如下所示的一行:
. /etc/yourdaemon.env
并将环境变量放入该文件中,使用语法export VAR=value
。在类似 Red Hat 的系统上,我相信此类文件的正确位置是 /etc/sysconfig
。 Debian/Ubuntu 似乎有 /etc/default
用于此目的。
【讨论】:
试过这种方法。问题在于“/etc/init.d/yourdaemon”以 root 身份运行,因此它们对我的脚本不可用,该脚本以星号运行。 启动-停止-守护进程 --start --chuid=$USER --exec $DAEMON。这会以 $USER 身份执行应用程序 我查看了start-stop-daemon
的Debian版本的源代码,只有一个地方接触到环境,重置HOME
。你能发布init.d
脚本吗?
成功了。我是没用过export
的人。谢谢。对于未来的用户来说只是一个小问题 - 如果在运行 /etc/init.d/myscript
时需要获取文件,最好将其添加到 /etc/default/myscript
。
一件事我仍然不明白 - 即使初始化脚本由 root 运行,变量如何导出到我的守护程序环境?【参考方案2】:
如果您选择的发行版现在使用 systemd,请尝试 systemctl edit --full asterisk.service
并考虑 EnvironmentFile
和 Environment
这些文件通常位于此处:/etc/systemd/system/myservice.service
例如cron.service
【讨论】:
以上是关于即使没有真实用户,如何在我的 Linux 服务中为 Asterisk 设置环境变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的可视 C# Web 服务中为我的 android 应用程序调用 LINQ 中的用户定义函数?
如何在 postgresql 中为数据库创建用户? [关闭]
如何在我的 Docker 自托管 Jitsi 服务器中为我的 Android 应用程序实现 jwt 令牌韵律插件?