'\" t .\" Title: gfservice .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 6 Jun 2013 .\" Manual: Gfarm .\" Source: Gfarm .\" Language: English .\" .TH "GFSERVICE" "1" "6 Jun 2013" "Gfarm" "Gfarm" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" gfservice \- control Gfarm servers from a remote host .SH "SYNOPSIS" .HP \w'\fBgfservice\fR\ 'u \fBgfservice\fR [\fIoptions\fR] sub\-command [host\-id] [\fIargument\ \&.\&.\&.\fR] .SH "DESCRIPTION" .PP \fBgfservice\fR is an utility for Gfarm administrators to operate servers (\fBgfmd\fR, \fBgfsd\fR and PostgreSQL) on remote hosts\&. OpenLDAP is not supported currently\&. It can start, stop, set up (execute \fBconfig\-gfarm\fR and \fBconfig\-gfsd\fR) and clean up the servers, for example\&. .PP A sample command line of \fBgfservice\fR looks like: .sp .if n \{\ .RS 4 .\} .nf \fBgfservice \fR\fB\fIstart\-gfmd\fR\fR\fB \fR\fB\fIgfmd2\fR\fR .fi .if n \{\ .RE .\} .PP where "\fIstart\-gfmd\fR" is a sub\-command and \fIgfmd2\fR is a host\-id respectively\&. Executing the command, \fBgfservice\fR tries to start gfmd on the host named \fIgfmd2\fR\&. To specify a remote server host, \fBgfservice\fR uses host\-id instead of hostname\&. All host\-ids (\fIgfmd1\fR, \fIgfmd2\fR, and so on) are defined in a configuration file of \fBgfservice\fR\&. Here is an example of the configuration file: .sp .if n \{\ .RS 4 .\} .nf gfmd1=metadb1\&.example\&.com gfmd1_CONFIG_GFARM_OPTIONS="\-A $LOGNAME \-X" gfmd2=metadb2\&.example\&.com gfmd2_CONFIG_GFARM_OPTIONS="\-A $LOGNAME \-X" gfsd1=spool1\&.example\&.com gfsd2=spool2\&.example\&.com .fi .if n \{\ .RE .\} .PP \fBgfservice\fR determines a path of the configuration file to be read with the following procedures: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} \fB\-f\fR \fIfile\fR option is specified, read \fIfile\fR\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} Otherwise, the environment variable \fIGFSERVICE_CONF\fR is defined and not empty, read the file\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1 .IP " 3." 4.2 .\} Otherwise, read $HOME/\&.gfservice\&. .RE .PP If \fBgfservice\fR fails to read a configuration file, it prints an error message and exits immediately\&. Note that the configuration file itself is a Bourne\-shell script and \fBgfservice\fR includes (exactly to say, \fIevaluates\fR) the file\&. See gfservice\&.conf(5) for more details about the configuration file\&. .PP \fBgfservice\fR uses SSH (Secure Shell) to connect with a remote host\&. Since it may execute \fBssh\fR several times during a sub\-command operation, it is recommended to use an SSH agent (e\&.g\&. \fBssh\-agent\fR of OpenSSH) or an authentication key with an empty passphrase to avoid typing a passphrase every time\&. .PP In addition with SSH, \fBgfservice\fR uses Sudo to get root privilege on the remote host\&. Please add a line like below to sudoers file (Sudo\*(Aqs configuration file) on each remote host\&. .sp .if n \{\ .RS 4 .\} .nf \fIuser\fR ALL=(root, _gfarmfs, _gfarmmd) NOPASSWD: gfservice\-agent .fi .if n \{\ .RE .\} .PP where \fIuser\fR is an user name who executes \fBgfservice\fR\&. The NOPASSWD option is not mandatory, but \fBsudo\fR may ask you a password several times if omitted\&. .PP Since \fBgfservice\fR executes an agent command named \fBgfservice\-agent\fR on the remote host using SSH and Sudo, \fBgfservice\-agent\fR command must have been installed on all hosts you want to operate using \fBgfservice\fR\&. .PP \fBgfservice\fR has a plug\-in system so that user can add new sub\-commands\&. See "PLUG\-IN SYSTEM" section of this man page for more details\&. .SH "OPTIONS" .PP \fB\-d\fR .RS 4 Print debug information\&. \fBgfservice\fR passes this option to \fBgfservice\-agent\fR so that also \fBgfservice\-agent\fR outputs debug information\&. .RE .PP \fB\-f\fR \fIfile\fR .RS 4 Read configuration from \fIfile\fR instead of the default\&. .RE .PP \fB\-t\fR \fItime\fR .RS 4 Set operation timeout in \fItime\fR seconds\&. When \fBgfservice\fR tries to start or stop a server program (gfmd, gfsd or a backend database), it waits until the operation is complete or \fItime\fR interval is elapsed\&. If "no" is specified as \fItime\fR, timeout never occurs\&. The default value is "no"\&. .RE .PP \fB\-k\fR .RS 4 When this option is specified with sub\-command \fBconfig\-gfarm\fR or \fBconfig\-gfarm\-master\fR, \fBgfservice\fR creates a shared secret key files using \fBgfkey\fR command\&. .RE .SH "SUB\-COMMANDS FOR GFMD" .PP The followings are sub\-commands which operate \fBgfmd\fR\&. The given host\-id argument must be "gfmd\fIn\fR" (gfmd1, gfmd2, \&.\&.\&.)\&. Otherwise \fBgfservice\fR reports an error and exits immediately\&. .PP \fBbackend\-db\-status\fR \fIhost\-id\fR .RS 4 Exit with an exit code 0, if a backend database is currently running\&. Otherwise exits with 1\&. .RE .PP \fBgfmd\-status\fR \fIhost\-id\fR .RS 4 Exit with an exit code 0, if \fBgfmd\fR is currently running\&. Otherwise exits with 1\&. .RE .PP \fBstart\-backend\-db\fR \fIhost\-id\fR .RS 4 Start a backend database if it is not running currently\&. .RE .PP \fBstart\-gfmd\fR \fIhost\-id\fR .RS 4 Start \fBgfmd\fR if it is not running currently\&. .RE .PP \fBstart\-gfmd\-master\fR \fIhost\-id\fR .RS 4 An alias of "\fBstart\-gfmd\fR" sub\-command\&. .RE .PP \fBstart\-gfmd\-slave\fR \fIhost\-id\fR .RS 4 This sub\-command is the same as "\fBstart\-gfmd\fR", but \fB\-S\fR option is added to \fBgfmd\fR\&. .RE .PP \fBstart\-gfarm\fR \fIhost\-id\fR .RS 4 Start a backend database and \fBgfmd\fR if they are not running currently\&. .RE .PP \fBstart\-gfarm\-master\fR \fIhost\-id\fR .RS 4 An alias of "\fBstart\-gfarm\fR" sub\-command\&. .RE .PP \fBstart\-gfarm\-slave\fR \fIhost\-id\fR .RS 4 This sub\-command is the same as "\fBstart\-gfarm\fR", but \fB\-S\fR option is added to \fBgfmd\fR\&. .RE .PP \fBstop\-backend\-db\fR \fIhost\-id\fR .RS 4 Stop a backend database if it is running currently\&. .RE .PP \fBstop\-gfmd\fR \fIhost\-id\fR .RS 4 Stop \fBgfmd\fR if it is running currently\&. .RE .PP \fBstop\-gfarm\fR \fIhost\-id\fR .RS 4 Stop \fBgfmd\fR and a backend database if they are running currently\&. .RE .PP \fBkill\-gfmd\fR \fIhost\-id\fR .RS 4 Kill \fBgfmd\fR (send SIGKILL) if it is running currently\&. .RE .PP \fBrestart\-backend\-db\fR \fIhost\-id\fR .RS 4 Perform "\fBstop\-backend\-db\fR" and "\fBstart\-backend\-db\fR" sub\-commands successively\&. .RE .PP \fBrestart\-gfmd\fR \fIhost\-id\fR .RS 4 Perform "\fBstop\-gfmd\fR" and "\fBstart\-gfmd\fR" sub\-commands successively\&. .RE .PP \fBrestart\-gfmd\-master\fR \fIhost\-id\fR .RS 4 An alias of "\fBrestart\-gfmd\fR" sub\-command\&. .RE .PP \fBrestart\-gfmd\-slave\fR \fIhost\-id\fR .RS 4 Perform "\fBstop\-gfmd\fR" and "\fBstart\-gfmd\-slave\fR" sub\-commands successively\&. .RE .PP \fBrestart\-gfarm\fR \fIhost\-id\fR .RS 4 Perform "\fBstop\-gfarm\fR" and "\fBstart\-gfarm\fR" sub\-commands successively\&. .RE .PP \fBrestart\-gfarm\-master\fR \fIhost\-id\fR .RS 4 An alias of "\fBrestart\-gfarm\fR" sub\-command\&. .RE .PP \fBrestart\-gfarm\-slave\fR \fIhost\-id\fR .RS 4 Perform "\fBstop\-gfarm\fR" and "\fBstart\-gfarm\-slave\fR" sub\-commands successively\&. .RE .PP \fBpromote\fR \fIhost\-id\fR .RS 4 Promote \fBgfmd\fR from a slave to a master\&. .RE .PP \fBpromote\-gfmd\fR \fIhost\-id\fR .RS 4 An alias of "\fBpromote\fR" sub\-command\&. .RE .PP \fBset\-gfmd\-conf\fR \fIhost\-id\fR \fIdirective\fR \fIvalue\fR .RS 4 Add .sp .if n \{\ .RS 4 .\} .nf \fIdirective\fR \fIvalue\fR .fi .if n \{\ .RE .\} .sp line to gfmd\&.conf file on the remote host\&. If gfmd\&.conf already has a \fIdirective\fR line, \fBgfservice\fR deletes it and then add a new line\&. .RE .PP \fBset\-gfsd\-conf\fR \fIhost\-id\fR \fIdirective\fR \fIvalue\fR .RS 4 Add .sp .if n \{\ .RS 4 .\} .nf \fIdirective\fR \fIvalue\fR .fi .if n \{\ .RE .\} .sp line to gfsd\&.conf file on the remote host\&. If gfsd\&.conf already has a \fIdirective\fR line, \fBgfservice\fR deletes it and then add a new line\&. .RE .PP \fBunset\-gfmd\-conf\fR \fIhost\-id\fR \fIdirective\fR .RS 4 Delete a \fIdirective\fR line in gfmd\&.conf file on the remote host\&. If gfmd\&.conf file doesn\*(Aqt contain \fIdirective\fR line, the file is unchanged\&. .RE .PP \fBunset\-gfsd\-conf\fR \fIhost\-id\fR \fIdirective\fR .RS 4 Delete a \fIdirective\fR line in gfsd\&.conf file on the remote host\&. If gfsd\&.conf file doesn\*(Aqt contain \fIdirective\fR line, the file is unchanged\&. .RE .PP \fBbackup\-backend\-db\fR .RS 4 Backup a backend database on the remote host and output the backup data to standard out\&. .RE .PP \fBbackup\-gfmd\-conf\fR \fIhost\-id\fR .RS 4 Output gfmd\&.conf file on the remote host to standard out\&. .RE .PP \fBbackup\-gfsd\-conf\fR \fIhost\-id\fR .RS 4 Output gfsd\&.conf file on the remote host to standard out\&. This sub\-command can be worked only when the remote host is configured in the private mode\&. .RE .PP \fBbackup\-usermap\fR \fIhost\-id\fR .RS 4 Output usermap file on the remote host to standard out\&. This sub\-command can be worked only when the remote host is configured in the private mode\&. .RE .PP \fBrestore\-backend\-db\fR \fIhost\-id\fR .RS 4 Restore a backend database on the remote host\&. The backup data are read from standard in\&. .RE .PP \fBrestore\-gfmd\-conf\fR \fIhost\-id\fR .RS 4 Recover gfmd\&.conf file on the remote host\&. \fBgfservice\fR reads a backup of gfmd\&.conf from standard in\&. .RE .PP \fBrestore\-gfsd\-conf\fR \fIhost\-id\fR .RS 4 Recover gfsd\&.conf file on the remote host\&. \fBgfservice\fR reads a backup of gfsd\&.conf from standard in\&. This sub\-command can be worked only when the remote host is configured in the private mode\&. .RE .PP \fBrestore\-usermap\fR \fIhost\-id\fR .RS 4 Recover usermap file on the remote host\&. \fBgfservice\fR reads a backup of usermap from standard in\&. This sub\-command can be worked only when the remote host is configured in the private mode\&. .RE .PP \fBconfig\-gfarm\fR \fIhost\-id\fR .RS 4 Execute \fBconfig\-gfarm\fR command on the remote host\&. If "gfmd\fIn\fR_CONFIG_GFARM_OPTIONS" variable is declared in the configuration file of \fBgfservice\fR, its value is passed to \fBconfig\-gfarm\fR command as options\&. Don\*(Aqt use this sub\-command when you want to enable replication of gfmd\&. Instead, use "\fBconfig\-gfarm\-master\fR" or "\fBconfig\-gfarm\-slave\fR" sub\-command in that case\&. If \fB\-k\fR option is specified, \fBgfservice\fR also creates a shared secret key files onto the gfmd host, using \fBgfkey\fR command\&. .RE .PP \fBconfig\-gfarm\-master\fR \fIhost\-id\fR .RS 4 This sub\-command is the same as \fBconfig\-gfarm\fR but gfmd replication is enabled automatically\&. .RE .PP \fBconfig\-gfarm\-slave\fR \fIhost\-id\fR \fImaster\-host\-id\fR .RS 4 This sub\-command is the same as \fBconfig\-gfarm\fR but gfmd replication is enabled automatically and the remote gfmd host is configured as a slave of \fImaster\-host\-id\fR\&. Then \fBgfservice\fR registers the slave host to a server list using \fBgfmdhost\fR command\&. \fBgfservice\fR also adds the slave host to \fImetadb_server_list\fR directive in gfarm2\&.conf file on the master gfmd host and distribute the updated gfarm2\&.conf file to all hosts defined in the configuration file\&. It also updates gfsd\&.conf file and distributes it to all gfmd and gfsd hosts, if "gfmd\fIn\fR_PRIVATE_MODE" variable is set to "true"\&. If the value of the variable "gfmd\fIn\fR_AUTH_TYPE" is "sharedsecret", it also copies a shared key file from the maste gfmd to the slave gfmd host\&. .RE .PP \fBunconfig\-gfarm\fR \fIhost\-id\fR .RS 4 Execute "\fBstop\-gfarm\fR" sub\-command and then delete all files and directories created by gfmd and a backend database\&. If you want to unconfigure a slave gfmd, use "\fBunconfig\-gfarm\-slave\fR" sub\-command instead\&. .RE .PP \fBunconfig\-gfarm\-master\fR \fIhost\-id\fR .RS 4 An alias of "\fBunconfig\-gfarm\fR" sub\-command\&. .RE .PP \fBunconfig\-gfarm\-slave\fR \fIhost\-id\fR \fImaster\-host\-id\fR .RS 4 This sub\-command is the same as "\fBunconfig\-gfarm\fR", but \fBgfservice\fR does some additional works\&. It also deletes the slave host from a server list using \fBgfmdhost\fR command and from \fImetadb_server_list\fR directive in gfarm2\&.conf file on all hosts defined in the configuration file\&. It also updates gfsd\&.conf file and distributes it to all gfmd and gfsd hosts, if "gfmd\fIn\fR_PRIVATE_MODE" variable is set to "true"\&. .RE .SH "SUB\-COMMANDS FOR GFSD" .PP The followings are sub\-commands which operate \fBgfsd\fR\&. The given host\-id argument must be "gfsd\fIn\fR" (gfsd1, gfsd2, \&.\&.\&.)\&. Otherwise \fBgfservice\fR reports an error and exits immediately\&. .PP \fBgfsd\-status\fR \fIhost\-id\fR .RS 4 Exit with an exit code 0, if \fBgfsd\fR is currently running\&. Otherwise exits with 1\&. .RE .PP \fBstart\-gfsd\fR .RS 4 Start \fBgfsd\fR if it is not running currently\&. .RE .PP \fBstop\-gfsd\fR .RS 4 Stop \fBgfsd\fR if it is running currently\&. .RE .PP \fBrestart\-gfsd\fR \fIhost\-id\fR .RS 4 Perform "\fBstop\-gfsd\fR" and "\fBstart\-gfsd\fR" sub\-commands successively\&. .RE .PP \fBset\-gfsd\-conf\fR \fIhost\-id\fR \fIdirective\fR \fIvalue\fR .RS 4 Same as \fBset\-gfsd\-conf\fR sub\-command for gfmd\&. .RE .PP \fBunset\-gfsd\-conf\fR \fIhost\-id\fR \fIdirective\fR .RS 4 Same as \fBunset\-gfsd\-conf\fR sub\-command for gfmd\&. .RE .PP \fBbackup\-gfsd\-conf\fR \fIhost\-id\fR .RS 4 Same as \fBbackup\-gfsd\-conf\fR sub\-command for gfmd\&. .RE .PP \fBbackup\-usermap\fR \fIhost\-id\fR .RS 4 Same as \fBbackup\-usermap\fR sub\-command for gfmd\&. .RE .PP \fBrestore\-gfsd\-conf\fR \fIhost\-id\fR .RS 4 Same as \fBrestore\-gfsd\-conf\fR sub\-command for gfmd\&. .RE .PP \fBrestore\-usermap\fR \fIhost\-id\fR .RS 4 Same as \fBrestore\-usermap\fR sub\-command for gfmd\&. .RE .PP \fBconfig\-gfsd\fR \fIhost\-id\fR .RS 4 Execute "\fBconfig\-gfsd\fR" command on the remote host\&. If "gfsd\fIn\fR_CONFIG_GFSD_OPTIONS" variable is declared in the configuration file of \fBgfservice\fR, its value is passed to \fBconfig\-gfsd\fR command as options\&. \fBgfservice\fR also registers the configured remote host as a filesystem node using \fBgfhost\fR command\&. If the value of the variable "gfsd\fIn\fR_AUTH_TYPE" is "sharedsecret", it also copies a shared key file from gfmd1 to the gfsd host\&. .RE .PP \fBunconfig\-gfsd\fR \fIhost\-id\fR .RS 4 Execute "\fBstop\-gfsd\fR" sub\-command and then delete all files and directories created by gfsd\&. .RE .SH "SUB\-COMMANDS FOR CLIENT" .PP The followings are sub\-commands which operate a client\&. The given host\-id argument must be "gfmd\fIn\fR" (gfmd1, gfmd2, \&.\&.\&.), "gfsd\fIn\fR" (gfsd1, gfsd2, \&.\&.\&.) or "client\fIn\fR" (client1, client2, \&.\&.\&.)\&. Otherwise \fBgfservice\fR reports an error and exits immediately\&. .PP \fBmount\fR \fIhost\-id\fR \fIdirectory\fR \fIoption\&.\&.\&.\fR .RS 4 Mount a Gfarm2 filesystem on \fIdirectory\fR on the remote host\&. The argument \fIoption\fR is an option to \fBgfarm2fs\fR command\&. .RE .PP \fBunmount\fR \fIhost\-id\fR \fIdirectory\fR .RS 4 Unmount a Gfarm2 filesystem on \fIdirectory\fR on the remote host\&. .RE .PP \fBumount\fR \fIhost\-id\fR \fIdirectory\fR .RS 4 An alias of "\fBunmount\fR" sub\-command\&. .RE .PP \fBset\-gfarm\-conf\fR \fIhost\-id\fR \fIdirective\fR \fIvalue\fR .RS 4 Add .sp .if n \{\ .RS 4 .\} .nf \fIdirective\fR \fIvalue\fR .fi .if n \{\ .RE .\} .sp line to gfarm2\&.conf file on the remote host\&. If gfarm2\&.conf already has a \fIdirective\fR line, \fBgfservice\fR deletes it and then add a new line\&. .RE .PP \fBunset\-gfarm\-conf\fR \fIhost\-id\fR \fIdirective\fR .RS 4 Delete a \fIdirective\fR line in gfarm2\&.conf file on the remote host\&. If gfarm2\&.conf file doesn\*(Aqt contain \fIdirective\fR line, the file is unchanged\&. .RE .PP \fBbackup\-gfarm\-conf\fR \fIhost\-id\fR .RS 4 Output gfarm2\&.conf file on the remote host to standard out\&. .RE .PP \fBbackup\-shared\-key\fR \fIhost\-id\fR .RS 4 Output a shared secret key file to standard out\&. .RE .PP \fBrestore\-gfarm\-conf\fR \fIhost\-id\fR .RS 4 Recover gfarm2\&.conf file on the remote host\&. \fBgfservice\fR reads a backup of gfarm2\&.conf from standard in\&. .RE .PP \fBrestore\-shared\-key\fR \fIhost\-id\fR .RS 4 Recover a shared secret key file on the remote host\&. \fBgfservice\fR reads a backup of the shared secret key from standard in\&. .RE .PP \fBconfig\-client\fR \fIhost\-id\fR .RS 4 Copy gfarm2\&.conf file from gfmd1 to the client host\&. If the value of the variable "client\fIn\fR_AUTH_TYPE" is "sharedsecret", it also copies a shared key file from gfmd1 to the client host\&. .RE .PP \fBunconfig\-client\fR \fIhost\-id\fR .RS 4 Delete gfarm2\&.conf file and a shared secret key file on the remote host\&. .RE .PP \fBgfcmd\fR \fIhost\-id\fR \fIcommand\-name\fR \fIcommand\-argument \&.\&.\&.\fR .RS 4 Execute a Gfarm command on the remote host\&. .RE .PP \fBgfcmd\-root\fR \fIhost\-id\fR \fIcommand\-name\fR \fIcommand\-argument \&.\&.\&.\fR .RS 4 Execute a Gfarm command on the remote host with root privilege\&. .RE .PP \fBgrid\-proxy\-init\fR \fIhost\-id\fR \fIcommand\-argument \&.\&.\&.\fR .RS 4 Execute \fBgrid\-proxy\-init\fR command on the remote host\&. .RE .SH "SUB\-COMMANDS FOR MULTIPLE HOSTS" .PP The followings are sub\-commands which operate on multiple hosts\&. The host\-id argument must not be specified\&. .PP \fBstart\-all\fR .RS 4 Start all backend databases, \fBgfmd\fR servers and \fBgfsd\fR servers\&. .RE .PP \fBstop\-all\fR .RS 4 Stop all \fBgfsd\fR servers, \fBgfmd\fR servers and backend databases, .RE .PP \fBkill\-gfmd\-all\fR .RS 4 Kill (send SIGKILL) all \fBgfmd\fR servers\&. .RE .PP \fBrestart\-all\fR .RS 4 Perform "\fBstop\-all\fR" and "\fBstart\-all\fR" sub\-commands successively\&. .RE .PP \fBconfig\-all\fR .RS 4 Perform "\fBconfig\-gfarm\-master\fR" for \fIgfmd1\fR and "\fBconfig\-gfarm\-slave\fR" for all other gfmd nodes\&. Then, perform "\fBconfig\-gfsd\fR" for all gfds nodes\&. Finally, perform "\fBconfig\-client\fR" for all client nodes\&. .RE .PP \fBunconfig\-all\fR .RS 4 Perform "\fBunconfig\-client\fR" for all client nodes\&. Then, perform "\fBunconfig\-gfsd\fR" for all gfds nodes\&. Finally, perform "\fBunconfig\-gfarm\fR" for all gfmd nodes\&. .RE .SH "PLUG\-IN SYSTEM" .PP \fBgfservice\fR has a plug\-in system so that user can add new sub\-commands\&. If given sub\-command is not provided by \fBgfservice\fR, \fBgfservice\fR refers to a file which has name of sub\-command under %%DATADIR%%/gfarm/gfservice directory\&. .PP Sub\-command file must be written as Bourne shell script\&. Sub\-command file for sub\-command "\fIname\fR", must have shell function named "\fBsubcmd_\fR\fB\fIname\fR\fR" which will be executed from \fBgfservice\fR, and "\fBsubcmd_\fR\fB\fIname\fR\fR\fB_agent\fR" which will be executed from \fBgfservice\-agent\fR\&. .PP For the case a sub\-command depends on a other user provided sub\-command, Sub\-command file for sub\-command "\fIname\fR", must have shell function named "\fB\fIname\fR\fR\fB_depends\fR" which must return list of sub\-commands\&. List of sub\-commands must be a string which is space separated list of sub\-command names\&. If sub\-command or it\*(Aqs agent does not have dependencies, return empty string\&. Similarly, sub\-command file must have shell function named "\fB\fIname\fR\fR\fB_agent_depends\fR" which must return list of sub\-command\*(Aqs agents\&.