Re: настройки сети

From
Andrey N. Oktyabrski (2:5020/400)
To
Andrey Ostanovsky
Date
2007-04-05T18:28:54Z
Area
RU.UNIX.SOLARIS
From: "Andrey N. Oktyabrski" <ano@bestmx.ru>

Andrey Ostanovsky wrote:
> <?xml version="1.0"?>
> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
> <!--
>         Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
>         Use is subject to license terms.
> 
> Не, я лучше, как-нибудь, по-старинке, плоскими файлами запуска из /etc/rc.d.
А что плохо-то? Что мешает написать что-то типа этого в своей XMLине?
          Copyright 2007 Andrey Ostanovsky, Inc.  All rights reserved.
          Use is subject to license terms.

>  AO> Я спрашивал здесь как это делается, мне рассказали и накидали ссылок
>  AO> где почитать. Оказалось всё довольно просто и даже удобно.
> 
> Насчет "удобно" - мне есть с чем сравнивать. Писать xml руками - в любом случае
> не удобно, про читать - я уже и не говорю.
Удобно - я имел в виду пользоваться :-) А xml написать один раз для 
одного сервиса. Для остальных копируем существующий и изменяем только 
имя сервиса, остальные правки сводятся к редактированию скрипта 
запуска/остановки. Пример:

ano@moon:~> cat /usr/local/smf/manifest/nginx.xml
<?xml version='1.0'?>
  <!DOCTYPE service_bundle SYSTEM 
'/usr/share/lib/xml/dtd/service_bundle.dtd.1'>

  <service_bundle type='manifest' name='ANOnginx:nginx'>

  <service
          name='network/nginx'
          type='service'
          version='1'>
          <create_default_instance enabled='false' />
          <single_instance />

          <dependency name='fs'
                  grouping='require_all'
                  restart_on='none'
                  type='service'>
                  <service_fmri value='svc:/system/filesystem/local' />
          </dependency>

          <dependency name='net'
                  grouping='require_all'
                  restart_on='none'
                  type='service'>
                  <service_fmri value='svc:/network/loopback' />
          </dependency>

          <exec_method
                  type='method'
                  name='start'
                  exec='/usr/local/smf/method/nginx start'
                  timeout_seconds='-1'>
          </exec_method>

          <exec_method
                  type='method'
                  name='stop'
                  exec='/usr/local/smf/method/nginx stop'
                  timeout_seconds='-1'>
          </exec_method>

          <exec_method
                  type='method'
                  name='reload'
                  exec='/usr/local/smf/method/nginx reload'
                  timeout_seconds='-1'>
          </exec_method>

          <exec_method
                  type='method'
                  name='restart'
                  exec='/usr/local/smf/method/nginx restart'
                  timeout_seconds='-1'>
          </exec_method>
  </service>

  </service_bundle>

ano@moon:~> cat /usr/local/smf/method/nginx
#!/bin/sh

. /lib/svc/share/smf_include.sh

prog="nginx"
progdir="/opt/nginx/sbin"
pidfile="/var/run/nginx.pid"

if [ ! -f /opt/nginx/conf/nginx.conf ]; then
     exit 0
fi

PATH=/usr/sbin:/usr/bin:/usr/local/sbin:/opt/csw/bin

start() {
         echo "Starting $prog "
         $progdir/$prog
}

stop() {
         echo "Stopping $prog "
         /usr/bin/kill `head -1 $pidfile`
}

restart() {
         /usr/bin/kill -s USR2 `head -1 $pidfile`
         start
}

reload() {
         echo "Reloading nginx daemon configuration: "
         /usr/bin/kill -s HUP `head -1 $pidfile`
}

case "$1" in
   start)
         start
         ;;
   stop)
         stop
         ;;
   restart)
         restart
         ;;
   reload)
         reload
         ;;
   *)
         echo $"Usage: $0 {start|stop|reload|restart}"
         exit 1
esac

exit $?

ano@moon:~> sudo svccfg
svc:> import /usr/local/smf/manifest/nginx.xml
...
svc:> select nginx
svc:/network/nginx> listprop
fs                       dependency
fs/entities              fmri     svc:/system/filesystem/local
fs/grouping              astring  require_all
fs/restart_on            astring  none
fs/type                  astring  service
net                      dependency
net/entities             fmri     svc:/network/loopback
net/grouping             astring  require_all
net/restart_on           astring  none
net/type                 astring  service
general                  framework
general/single_instance  boolean  true
start                    method
start/exec               astring  "/usr/local/smf/method/nginx start"
start/timeout_seconds    count    18446744073709551615
start/type               astring  method
stop                     method
stop/exec                astring  "/usr/local/smf/method/nginx stop"
stop/timeout_seconds     count    18446744073709551615
stop/type                astring  method
reload                   method
reload/exec              astring  "/usr/local/smf/method/nginx reload"
reload/timeout_seconds   count    18446744073709551615
reload/type              astring  method
restart                  method
restart/exec             astring  "/usr/local/smf/method/nginx restart"
restart/timeout_seconds  count    18446744073709551615
restart/type             astring  method

Всё. Сложностей-то и нет никаких вроде. Ну или я их не заметил :-)
--- ifmail v.2.15dev5.3
 * Origin: Demos online service (2:5020/400)
SEEN-BY: 450/159 1024 461/640 469/999 4625/8 5000/76 5000 5006/1 5007/1
SEEN-BY: 5010/70 5011/13 5012/46 5015/28 5020/175 194 400 545 902 1922 2238
SEEN-BY: 5020/4441 5021/29 5025/3 5030/1080 1957 5035/38 5036/1 5045/7 5051/15
SEEN-BY: 5054/1 4 8 9 28 35 37 5060/88 5061/15 120 5062/10 5064/7 5066/18
SEEN-BY: 5075/5 5085/13 5093/57 5095/20 5096/18
PATH: 5020/400 545 5054/1 37