件名に記載されているように。コマンドラインから正常に機能する次のスクリプトがあります。
#!/sbin/sh
GITCOMMAND="git daemon --base-path=/my/git/repo --export-all --enable=receive-pack --reuseaddr"
startcmd () {
`$GITCOMMAND`
}
stopcmd () {
pkill -f "git *"
}
case "$1" in
'start')
startcmd
;;
'stop')
stopcmd
;;
'restart')
stopcmd
sleep 1
startcmd
;;
*)
echo "Usage: $0 { start | stop | restart }"
exit 1
;;
esac
およびこのSMF構成:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="manifest" name="git-server">
<service name="site/git-server" type="service" version="1">
<create_default_instance enabled="true"/>
<single_instance/>
<dependency name="network" grouping="require_all" restart_on="refresh" type="service">
<service_fmri value="svc:/milestone/network:default"/>
</dependency>
<dependency name="filesystem" grouping="require_all" restart_on="refresh" type="service">
<service_fmri value="svc:/system/filesystem/local"/>
</dependency>
<method_context working_directory="/home/massive/massive-lannister">
<method_credential user="admin" group="staff" privileges='basic,net_privaddr' />
<method_environment>
<envvar name="PATH" value="/usr/local/bin:/usr/bin:/usr/sbin:/bin"/>
<envvar name="HOME" value="/develop"/>
</method_environment>
</method_context>
<exec_method
type="method"
name="start"
exec="/usr/local/bin/start-stop-git.sh start"
timeout_seconds="60"/>
<exec_method
type="method"
name="stop"
exec="/usr/local/bin/start-stop-git.sh stop"
timeout_seconds="60"/>
<property_group name="startd" type="framework">
<propval name="duration" type="astring" value="child"/>
<propval name="ignore_error" type="astring" value="core,signal"/>
</property_group>
<property_group name="application" type="application">
</property_group>
<stability value="Evolving"/>
<template>
<common_name>
<loctext xml:lang="C">git server service</loctext>
</common_name>
</template>
</service>
</service_bundle>
サービスは、コマンドラインでエラーなしで登録および有効化しますが、実行されません。
# svcs -xv
svc:/site/git-server:default (git server service)
State: maintenance since Sun Mar 16 02:29:04 2014
Reason: Method failed.
See: http://illumos.org/msg/SMF-8000-8Q
See: /var/svc/log/site-git-server:default.log
Impact: This service is not running.
ログファイルはあまり明らかにしません:
# cat /var/svc/log/site-git-server:default.log
[ Mar 16 02:29:04 Enabled. ]
[ Mar 16 02:29:04 Executing start method ("/usr/local/bin/start-stop-git.sh start"). ]
[ Mar 16 02:29:04 Stopping because service exited with a configuration error. ]
ここからどこへ行けばいいのかわからない。どんな助けでもありがたいです。
OK、SMF構成XMLに問題が見つかりました。誰かがこれから利益を得るならば、ここに実用的な解決策があります:
/usr/local/bin/start-stop-git.sh
#!/sbin/sh
GITCOMMAND="git daemon --base-path=/my/git/repo --export-all --enable=receive-pack --reuseaddr"
startcmd () {
`$GITCOMMAND`
}
stopcmd () {
pkill -f "git *"
}
case "$1" in
'start')
startcmd
;;
'stop')
stopcmd
;;
'restart')
stopcmd
sleep 1
startcmd
;;
*)
echo "Usage: $0 { start | stop | restart }"
exit 1
;;
esac
git-server.xml:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="manifest" name="git-server">
<service name="site/git-server" type="service" version="1">
<create_default_instance enabled="true"/>
<single_instance/>
<dependency name="network" grouping="require_all" restart_on="refresh" type="service">
<service_fmri value="svc:/milestone/network:default"/>
</dependency>
<dependency name="filesystem" grouping="require_all" restart_on="refresh" type="service">
<service_fmri value="svc:/system/filesystem/local"/>
</dependency>
<method_context working_directory="/develop">
<method_credential user="admin" group="staff" privileges='basic,net_privaddr' />
<method_environment>
<envvar name="PATH" value="/opt/local/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin"/>
<envvar name="HOME" value="/develop"/>
</method_environment>
</method_context>
<exec_method
type="method"
name="start"
exec="/usr/local/bin/start-stop-git.sh start"
timeout_seconds="60"/>
<exec_method
type="method"
name="stop"
exec="/usr/local/bin/start-stop-git.sh stop"
timeout_seconds="60"/>
<property_group name="startd" type="framework">
<propval name="duration" type="astring" value="child"/>
<propval name="ignore_error" type="astring" value="core,signal"/>
</property_group>
<property_group name="application" type="application">
</property_group>
<stability value="Evolving"/>
<template>
<common_name>
<loctext xml:lang="C">git server service</loctext>
</common_name>
</template>
</service>
</service_bundle>
インストールして確認するには:
#svccfg import git-server.xml
#svcadm enable git-server
#svcs -xv
システムが正常な場合、最後のコマンドは何も出力しないはずです。