Solaris 10 incorpora SMF: Service Management Facility, que básicamente es un daemon que controla los servicios que corren en el sistema operativo. Su idea es reemplazar los scripts de /etc/init.d y /etc/rc.*.d, con una utilidad bastante más robusta y simple de configurar.
A partir de Solaris 10, entonces, vemos que muchos servicios que antes estaban en /etc/init.d ahora desaparecieron de allí y si revisamos el /etc/inittab vemos que una de las primeras cosas que hace es levantar el svc.startd que es el daemon que maneja los servicios de SMF. De hecho, dicen que ahora el boot es bastante más limpito, porque todos los mensajes de los servicios que se inician se van logueando en distintos lugares, y uno termina viendo algo así:
SunOS Release 5.10 Version Generic 64-bit
Copyright 1983-2004 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Hostname: demobox
NIS domain name is testlab.example.com
checking ufs filesystems
demobox console login:
En este link hay una Quickstart Guide muy interesante, donde muestra cómo se hacían las cosas en las versiones anteriores de Solaris y cómo deberían hacerse ahora con SMF: http://www.sun.com/bigadmin/content/selfheal/smf-quickstart.jsp
Subir y bajar el apache es tan sencillo como ejecutar los siguientes comandos:
Levantar: svcadm enable network/http:apache2
Bajar: svcadm disable network/http:apache2
Reiniciar: svcadm restart network/http:apache2
Como podrán observar, los servicios se agrupan en unidades más "user-friendly" (o admin-friendly), en vez de ser archivos tirados en directorios (de hecho en Solaris siempre era más molesto que en Linux, porque el archivo debía estar indefectiblemente en /etc/init.d y con hard links en /etc/rc3.d - para el caso de servicios que levantaran en runlevel 3). Además se pueden configurar facilmente variables de entorno y otras cosas locas que se deben inicializar con el servicio.
Por otro lado, al haber un daemon constantemente corriendo, si el servicio no es deshabilitado por un "restarter" habilitado, el servicio se levanta automáticamente:
[root@BOCUNOCDWB04:~]# svcadm enable network/http:apache2
[root@BOCUNOCDWB04:~]# ps -ef |grep httpd
root 23319 1 3 13:38:59 ? 0:01 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23328 23319 0 13:39:02 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
root 23330 22786 0 13:39:04 pts/2 0:00 grep httpd
nobody 23327 23319 0 13:39:02 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
root 23322 1 0 13:39:01 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23326 23319 0 13:39:02 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23325 23319 0 13:39:02 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23324 23319 0 13:39:02 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
[root@BOCUNOCDWB04:~]# pkill httpd
[root@BOCUNOCDWB04:~]# ps -ef |grep httpd
root 23357 1 0 13:39:22 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23360 23351 0 13:39:22 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
root 23365 22786 0 13:39:22 pts/2 0:00 grep httpd
root 23351 1 2 13:39:20 ? 0:01 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23359 23351 0 13:39:22 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23361 23351 0 13:39:22 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23362 23351 0 13:39:22 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
nobody 23363 23351 0 13:39:22 ? 0:00 /usr/local/apache2/bin/httpd -k start -DSSL
[root@BOCUNOCDWB04:~]#
De la misma forma, si hay algún error al levantar el programa o el mismo se muere dejando algún error, el servicio es puesto en estado "maintenance", para poder consultar posteriormente por qué no está corriendo.
[root@BOCUNOCDWB04:~]# svcs -xv network/http:apache2
svc:/network/http:apache2 (Apache 2 HTTP server)
State: maintenance since Mon 14 Jul 2008 01:37:39 PM COT
Reason: Start method failed repeatedly, last exited with status 1.
See: http://sun.com/msg/SMF-8000-KS
See: man -M /usr/apache2/man -s 8 httpd
See: /var/svc/log/network-http:apache2.log
Impact: This service is not running.
[root@BOCUNOCDWB04:~]#
Para configurar los servicios hay una consola a la que podemos acceder con svccfg.
[root@BOCUNOCDWB04:~]# svccfg
svc:> select network/http
svc:/network/http> select apache2
svc:/network/http:apache2> listprop
httpd application
httpd/stability astring Evolving
httpd/ssl boolean true
network dependency
network/entities fmri svc:/milestone/network:default
network/grouping astring require_all
network/restart_on astring error
network/type astring service
filesystem-local dependency
filesystem-local/entities fmri svc:/system/filesystem/local:default
filesystem-local/grouping astring require_all
filesystem-local/restart_on astring none
filesystem-local/type astring service
autofs dependency
autofs/entities fmri svc:/system/filesystem/autofs:default
autofs/grouping astring optional_all
autofs/restart_on astring error
autofs/type astring service
startd framework
startd/ignore_error astring core,signal
general framework
general/enabled boolean true
start method
start/exec astring "/lib/svc/method/http-apache2 start"
start/timeout_seconds count 60
start/type astring method
stop method
stop/exec astring "/lib/svc/method/http-apache2 stop"
stop/timeout_seconds count 60
stop/type astring method
refresh method
refresh/exec astring "/lib/svc/method/http-apache2 refresh"
refresh/timeout_seconds count 60
refresh/type astring method
restarter framework NONPERSISTENT
restarter/transient_contract count restarter/logfile astring /var/svc/log/network-http:apache2.log
restarter/contract count 299148
restarter/start_pid count 23339
restarter/start_method_timestamp time 1216060760.150109000
restarter/start_method_waitstatus integer 0
restarter/auxiliary_state astring none
restarter/next_state astring none
restarter/state astring online
restarter/state_timestamp time 1216060760.155996000
restarter_actions framework NONPERSISTENT
restarter_actions/restart integer
restarter_actions/maint_off integer
svc:/network/http:apache2>
La forma en que el daemon manejará los servicios se define en un script que tiene "métodos", que serán invocados por el daemon. Estos scripts están en /lib/svc/methods, y el daemon los llama por ejemplo de esta forma:
/lib/svc/methods/http-apache2 start
Adentro el método consulta algunas variables del servicio y lo levanta. El script es muy similar a los de /etc/init.d.
Con svcs se listan los servicios.
Con svcs -l
% svcs -p network/smtp:sendmail
STATE STIME FMRI
online 18:20:30 svc:/network/smtp:sendmail
18:20:30 655 sendmail
18:20:30 657 sendmail
Y con svcs -x
Tiene muchas más cosas locas. Yo creo que debe tener alguna forma de controlar servicios remotos, porque cada servicio tiene una URI que llaman FMRI (Fault Managed Resource Identifier), que puede ser algo así:
svc://localhost/system/system-log:defaultsvc:/system/system-log:defaultsystem/system-log:default
También hay otras cosas locas para el manejo de los runlevels del SO. Podés definir milestones que, si no entendí mal, serían como runlevels custom para los cuales vos podés definir qué servicios corren.
Más información sobre SMF en el System Administration Guide de Solaris: http://docs.sun.com/app/docs/doc/817-1985
Particularmente en estos dos capítulos:
http://docs.sun.com/app/docs/doc/817-1985/hbrunlevels-25516?a=view
http://docs.sun.com/app/docs/doc/817-1985/faauf?a=view
16/07/2008: Editado: Dejo un cheat-sheet de SMF: http://www2.petervg.nl/quick_reference/SolarisSMF.pdf
No hay comentarios:
Publicar un comentario