1

我有一个由 SMF 执行的守护进程。问题是发生错误时,我有失败代码,然后需要从头开始重新启动。现在它正在发送 sys.exit(0) (Python),但 SMF 一直将其置于维护模式。

我已经与 SMF 合作过,知道它有时会自动重新启动某些服务(并让其他服务失败并让您像这样处理它们)。如何将此进程归类为需要自动重启的进程?它是一个 SMF 设置,一种失败的方法,什么?

4

4 回答 4

2

手册页

Solaris 使用svc.startd 手册页中描述的startd/critical_failure_count和的组合:startd/critical_failure_period

开始/critical_failure_count

开始/critical_failure_period

critical_failure_count和属性一起指定在svc.startd将服务转换为维护之前的给定时间间隔内允许的critical_failure_period最大服务失败次数。如果失败次数超过任何秒数,svc.startd会将服务转换为维护。critical_failure_countcritical_failure_period

源代码中的默认值

默认值可以在源代码中找到,该值取决于服务是否为“等待样式”

if (instance_is_wait_style(inst))
    critical_failure_period = RINST_WT_SVC_FAILURE_RATE_NS;
else
    critical_failure_period = RINST_FAILURE_RATE_NS;

默认值为5 次失败/10 分钟或 5 次失败/秒

#define RINST_START_TIMES   5       /* failures to consider */
#define RINST_FAILURE_RATE_NS   600000000000LL  /* 1 failure/10 minutes */
#define RINST_WT_SVC_FAILURE_RATE_NS    NANOSEC /* 1 failure/second */

这些变量可以在 SMF 中设置为属性

<service_bundle type="manifest" name="npm2es">
  <service name="site/npm2es" type="service" version="1">
    ...
    <property_group name="startd" type="framework">
      <propval name='critical_failure_count' type='integer' value='10'/>
      <propval name='critical_failure_period' type='integer' value='30'/>
      <propval name="ignore_error" type="astring" value="core,signal" />
    </property_group>
    ...
  </service>
</service_bundle>

TL;博士

在检查 startd 值后,如果服务是“等待方式”,它将被限制为 1/sec 的最大重启,直到它不再因非 cfg 错误而退出。如果服务不是“等待方式”,它将进入维护模式

于 2015-12-17T20:45:48.140 回答
1

假设一个正常的服务清单,我怀疑你正在进入维护,因为 SMF正在“太快”重新启动你(这有点武断)。 svcs -xv应该告诉你是不是这样。如果是,SMF 正在重新启动您,然后您又快速退出,它决定放弃,直到问题得到解决(并且您已经手动解决svcadm clear了它。

我想知道退出 0(并表示成功)是否会导致进一步的混乱,但似乎不会。

我不认为 Oracle Solaris 允许您调整 SMF 认为“太快”的内容。

于 2013-04-18T18:22:13.700 回答
0

事实证明,我连续两次 pkill 以确保一切都正确终止。第二个,自然而然地退出了0. 将其更改exit 0为在脚本末尾包含一个解决了该问题。

于 2013-04-18T19:29:59.803 回答
0

您必须创建一个服务清单。这比没有更复杂。这有示例清单并记录清单结构。

http://www.oracle.com/technetwork/server-storage/solaris/solaris-smf-manifest-wp-167902.pdf

于 2013-04-18T03:06:55.230 回答