即使没有真实用户,如何在我的 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 并考虑 EnvironmentFileEnvironment

这些文件通常位于此处:/etc/systemd/system/myservice.service 例如cron.service

【讨论】:

以上是关于即使没有真实用户,如何在我的 Linux 服务中为 Asterisk 设置环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的可视 C# Web 服务中为我的 android 应用程序调用 LINQ 中的用户定义函数?

在 Swift 中为聊天应用程序保持套接字打开

如何在 postgresql 中为数据库创建用户? [关闭]

如何在我的 Docker 自托管 Jitsi 服务器中为我的 Android 应用程序实现 jwt 令牌韵律插件?

如何在Linux bash中为每个用户在一行中显示组下的用户

即使用户已卸载 Mail.app,如何在我的应用程序中添加电子邮件链接仍然有效?