使环境变量可用于在 init.d 脚本中启动的下游进程

Mar*_*c A 6 environment-variables systemd upstart amazon-ec2 init.d

这个问题源于@FrustratedWithFormsDesigner评论

如何使export在 init.d 脚本中设置的环境变量可用于在同一个 init.d 脚本中启动的下游进程?

更详细地说,我在 Amazon EC2 实例上并使用 init.d 脚本来控制我的node.js 服务器,而该服务器又由nodemon监控文件更改并node根据需要重新启动的服务器控制。简而言之,我的 init.d 脚本启动nodemon,然后启动node. export在 init.d 脚本中设置的环境变量似乎对 可用nodemon,但对 不可用node。我如何使这些环境变量也可用node

目前,我的 Amazon EC2 实例中只有 init.d 可用,所以这甚至可以使用 init.d 脚本,如果不能,这是否可以使用 upstart 或最好使用 systemd?

Mar*_*erg 4

我建议切换到基于 systemd 的 Linux 发行版,例如 Fedora 或 Ubuntu 16.04。systemd可以轻松地将环境变量传递给您的进程,并且它可以处理自动重新启动失败的进程以及在启动时启动它。systemd 的日志也可以很好地处理日志记录。也没有安装或运行其他任何东西的开销,因为 systemd 是操作系统发行版的一部分。

以下是在单元文件中使用 systemd 设置两个环境变量的示例:

Environment="ONE=one" 'TWO=two two'
Run Code Online (Sandbox Code Playgroud)

完整的文档在这里

您的问题部分是复杂性之一,因为初始化系统和进程管理器都处理传递环境变量。使用 systemd 作为初始化系统和进程管理器,消除了一层复杂性。