【问题标题】:Using rc.local to start network dependent services使用 rc.local 启动网络相关服务
【发布时间】:2016-10-08 20:45:46
【问题描述】:

使用 /etc/rc.local 来初始化依赖网络的服务安全吗?

我正在使用它来启动一项服务,该服务在其启动过程中向网络发出一些请求。偶尔会发生服务启动失败(并非总是)。

这是我得到的错误:

2016-06-07T12:01:48.724+0000 W NETWORK [ReplicationExecutor] getaddrinfo("my_machine_local_dns") failed: Name or service not known

失败时,如果我在机器启动完成后尝试手动初始化服务,没有错误。

我正在考虑任何比赛条件。示例:失败是因为服务在网络加载完成之前启动或类似的。

我在 aws vpc 中使用 centos,而相关服务在 docker 容器中运行。

【问题讨论】:

  • 您的 Centos 是在私有子网中还是在 VPC 中的公共子网中?

标签: linux amazon-web-services networking docker centos


【解决方案1】:

您的服务在启动时失败,因为您的实例位于私有子网中。私有子网中的实例在完全创建之前没有互联网连接。一旦在私有子网中完全创建了实例,它们就会开始与 NAT 实例对话,然后获得 Internet 连接。这就是为什么在启动时运行它会失败的原因。

使用 /etc/rc.local 来初始化依赖的服务是否安全 网络?

/usr/local/ 确实是正确的位置,而 /opt 确实是用于第三方应用程序; “/opt 保留用于安装附加应用程序软件包。”根据最佳实践。

【讨论】:

  • 在这种情况下,实例已经创建,并且在实例重启过程中发生错误。是否也是如此?此外,这也解释了为什么它偶尔会发生而不是一直发生?
  • 是的,当您在私有子网中重新启动实例时就是这种情况。
  • 有什么建议可以在哪里放置这些脚本而不是 rc.local?
  • 我没有得到你的问题?
  • 服务启动失败,因为它位于 rc.local 上,此时实例没有网络连接。哪里应该是放置服务初始化脚本的安全地方? /etc/init.d/ ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 2013-10-31
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多