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() 的连续调用。
支持以下参数:
从 scds_initialize(3HA) 返回的句柄
超时时间(秒)
scds_svc_wait() 函数返回以下值:
该函数成功。
该函数失败。
函数超时。
未发生进程终止,或已成功重新启动进程。
失败数达到 Retry_count 属性的值。
出现系统错误或其他意外错误。
有关其他错误代码的描述,请参见 scha_calls(3HA)。
以下示例显示如何在 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); }
头文件
库
有关以下属性的描述,请参见 attributes(5):
|
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() 以在进程组的运行状况检查之间进行等待。