Oracle® Solaris Cluster 参考手册

退出打印视图

更新时间: 2014 年 7 月,E51743-01
 
 

scds_svc_wait(3HA)

名称

scds_svc_wait - 等候指定的超时时间,以待受监视进程终止

用法概要

cc [flags…] –I /usr/cluster/include file –L /usr/cluster/lib –l dsdev#include <rgm/libdsdev.h>
     scha_err_t scds_svc_wait(scds_handle_t handle, time_t timeout);

描述

scds_svc_wait() 函数可等候指定的超时时间,以待受监视进程组终止。它将针对调用 START 方法所传递的资源来等待 scds_pmf_start(3HA) 启动的所有进程组。scds_svc_wait() 函数使用资源的 Retry_interval Retry_count 属性限制要等待的进程终止数。如果 Retry_interval 期间的进程终止数达到 Retry_count 值,scds_svc_wait () 将返回 SCHA_ERR_FAIL

如果进程失败数低于 Retry_count 的值,则将重新启动该进程,scds_svc_wait() 将等候全部超时时间,以待更多进程终止。进程失败的计数包含对 scds_svc_wait() 的连续调用。

参数

支持以下参数:

handle

scds_initialize(3HA) 返回的句柄

timeout

超时时间(秒)

返回值

scds_svc_wait() 函数返回以下值:

0

该函数成功。

非零值

该函数失败。

错误

SCHA_ERR_TIMEOUT

函数超时。

SCHA_ERR_NOERR

未发生进程终止,或已成功重新启动进程。

SCHA_ERR_FAIL

失败数达到 Retry_count 属性的值。

SCHA_ERR_STATE

出现系统错误或其他意外错误。

有关其他错误代码的描述,请参见 scha_calls(3HA)

示例

示例 1 START 方法中使用 scds_svc_wait()

以下示例显示如何在 START 方法中使用 scds_svc_wait 以便在服务无法启动时提早返回。使用 scds_pmf_start() 启动应用程序进程后,START 方法必须等待应用程序完成自身的全部初始化并变得可用,然后才能返回成功。如果应用程序无法启动,START 方法必须等待整个 Start_timeout 时间,然后才能返回失败。通过使用如以下示例中的 scds_svc_wait(),允许 START 方法最多重新启动应用程序 Retry_count 次,且在服务无法启动时从 START 方法中提早返回失败。

/*
 * scds_svc_wait is a subroutine in a START method to
 * check that the service is fully available before returning.
 * Calls svc_probe() to check service availability.
 */
int
svc_wait(scds_handle_t handle)
{
	while (1) {
		/* Wait for 5 seconds */
		if (scds_svc_wait(handle, 5) != SCHA_ERR_NOERR) {
			scds_syslog(LOG_ERR, "Service failed to start.");
			return (1);		/* Start Failure */
		}
		/* Check if service is fully up every 5 seconds */
		if (svc_probe(handle) == 0) {
			scds_syslog(LOG_INFO, "Service started successfully.");
			return (0);
		}
	}
	return (0);
}

文件

/usr/cluster/include/rgm/libdsdev.h

头文件

/usr/cluster/lib/libdsdev.so

属性

有关以下属性的描述,请参见 attributes(5)

属性类型
属性值
可用性
ha-cluster/developer/api
接口稳定性
Evolving(发展中)

另请参见

scds_initialize(3HA)scds_pmf_start(3HA)scha_calls(3HA)attributes(5)r_properties(5)

附注

  • 如果 START 方法超过资源上的 Start_timeout 设置,资源组管理器 (Resource Group Manager, RGM) 将终止 START 方法,即使 START 方法当前正在等待 scds_svc_wait() 返回。

  • 如果资源上的 Retry_interval 大于 Start_timeout,则 RGM 可能会使 START 方法超时,即使失败数低于 Retry_count

  • 如果 START 方法通过对 scds_pmf_start() 进行多次调用来启动多个进程组,则 scds_svc_wait () 将在它们结束时启动进程组。它不会在进程组之间强制任何依赖性。如果进程组之间存在依赖性(一个进程组失败时需要重新启动其他进程组),请不要使用 scds_svc_wait()。请改用 sleep() 以在进程组的运行状况检查之间进行等待。