La méthode xfnts_start appelle la méthode svc_start(), qui est définie dans le fichier xfnts.c, pour démarrer le démon xfs. Cette rubrique décrit Démarrage_svc().
La commande permettant de démarrer le démon xfs est la suivante :
# xfs -config config-directory/fontserver.cfg -port port-number |
La propriété d'extension Confdir_list identifie le config-directory alors que la propriété système Port_list identifie le port-number. L'administrateur du cluster fournit à ces propriétés des valeurs spécifiques lorsqu'il configure le service de données.
La méthode xfnts_start déclare ces propriétés en tant que tableaux de chaînes de caractères. Elle prend les valeurs que l'administrateur du cluster définit à l'aide des fonctions scds_get_ext_confdir_list() et scds_get_port_list(). Ces fonctions sont décrites dans la page de manuel scds_property_functions(3HA).
scha_str_array_t *confdirs; scds_port_list_t *portlist; scha_err_t err; /* obtention du répertoire de configuration depuis la propriété Confdir_list */ confdirs = scds_get_ext_confdir_list(scds_handle); (void) sprintf(xfnts_conf, "%s/fontserver.cfg", confdirs->str_array[0]); /* obtention du port à utiliser par XFS depuis la propriété Liste_port */ err = scds_get_port_list(scds_handle, &portlist); if (err != SCHA_ERR_NOERR) { scds_syslog(LOG_ERR, "Could not access property Port_list."); return (1); }
Notez que la variable confdirs pointe vers le premier élément (0) du tableau.
La méthode xfnts_start utilise la fonction sprintf() pour former la ligne de commande de xfs.
/* Construct the command to start the xfs daemon. */ (void) sprintf(cmd, "/usr/openwin/bin/xfs -config %s -port %d 2>/dev/null", xfnts_conf, portlist->ports[0].port);
Notez que la sortie est redirigée vers /dev/null pour supprimer les messages générés par le démon.
La méthode xfnts_start transmet la ligne de commande xfs à scds_pmf_start() pour démarrer le service de données sous le contrôle du gestionnaire de processus.
scds_syslog(LOG_INFO, "Issuing a start request."); err = scds_pmf_start(scds_handle, SCDS_PMF_TYPE_SVC, SCDS_PMF_SINGLE_INSTANCE, cmd, -1); if (err == SCHA_ERR_NOERR) { scds_syslog(LOG_INFO, "Start command completed successfully."); } else { scds_syslog(LOG_ERR, "Failed to start HA-XFS "); }
Notez les points suivants en ce qui concerne l'appel destiné à scds_pmf_start() :
L'argument SCDS_PMF_TYPE_SVC identifie le programme à démarrer en tant qu'application de service de données. Cette méthode peut également lancer un détecteur de pannes ou un autre type d'application.
L'argument SCDS_PMF_SINGLE_INSTANCE l'identifie comme une ressource à instance unique.
L'argument cmd est la ligne de commande qui a été générée précédemment.
Le dernier argument, -1, indique le niveau de surveillance des processus enfants. La valeur -1 indique que le gestionnaire de processus surveille tous les processus enfants ainsi que le processus d'origine.
Avant de renvoyer un message, svc_pmf_start() libère la mémoire allouée pour la structure portlist.
scds_free_port_list(portlist); return (err);