I want to share with you some experience I had with one of my ISVs who uses Solaris SMF (Service Management Facility ) to start/stop/manage his application. In few words, SMF is a key component of Solaris Predictive Self-Healing, it delivers ways to control services and to restart failed services automatically. An important feature of SMF is the fact that it allows to its users to define relationships between services to reflect that some services rely or require the availability of other services. This programmatic mechanism is more dynamic and safe than the classical /etc/inittab and the various rc scripts which should be edited to fully control services. When you want to register your application as a service controlled by SMF and define your service dependencies, you have to pay attention not to fail into circular dependencies error. As an example, if you have a service foo, which depends on filesystem and has sysidtool dependent on it ( on foo ), the if you define the dependencies as following :
svcs -D foo
STATE STIME FMRI
online 16:28:47 svc:/network/physical:default
online 16:28:49 svc:/system/sysidtool:net
svcs -d foo
online Dec_18 svc:/system/filesystem/usr:default
you are likely to get a circular dependencies error from SMF. Why
? Because sysidtool
depends on foo which depends on filesystem which depends on
single-user milestone which depends on sysidtool.
The simplest way to avoid this problem is by grep the xml files under
/var/svc/manifest after you decided which dependencies your service
needs. In this very banal way you can visualize unexpected
dependencies and avoid loops. I warmly recommend the read of http://www.sun.com/blueprints/0206/819-5150.pdf by Rob Romack which is an excellent guide for Solaris SMF understanding.


