PostgreSQL - Adding to SVCS list.

I'm having some troubles setting an instance of postgreSQL to automatically start upon system boot. I have two servers running this app, one is automatically starting the service, the other is not. I'm attempting to use the "svcadmin" command, however, apparently when I run a "svcs -a" search, the appropriate instance doesn't display in the list of services.

Here's what a get with svcs -a | grep postgresql

disabled Nov_17 svc:/application/database/postgresql:version_81
disabled Nov_17 svc:/application/database/postgresql:version_82_64bit
online Nov_17 svc:/application/database/postgresql:version_82

However, none of these are the instance I'm looking to run.

version 8.2 is located in:

postgres 385 381 0 Nov 17 ? 0:02 /usr/postgres/8.2/bin/postgres -D /var/postgres/8.2/data

I'm looking to run this:

postgres 426 1 0 Nov 17 ? 0:01 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

How come the application located in /usr/local/pgsql, doesn't display in the service list? What can I do to make it appear as a service, or, just get this application to automatically start upon server boot? I appreciate any and all assistance.

It appears you need to create a new service, try this set of instructions:

I found that info, however, there is no .xml for the server successfully running this service. It actually shows up when executing "svcs -a." I'd prefer avoiding this option as I assume, it should automatically show in the list of services.

Can you post output of:

svccfg export svc:/application/database/postgresql
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
  <service name='application/database/postgresql' type='service' version='0'>
    <dependency name='network' grouping='require_all' restart_on='none' type='service'>
      <service_fmri value='svc:/milestone/network:default'/>
    </dependency>
    <dependency name='filesystem-local' grouping='require_all' restart_on='none' type='service'>
      <service_fmri value='svc:/system/filesystem/local:default'/>
    </dependency>
    <exec_method name='start' type='method' exec='/lib/svc/method/postgresql start' timeout_seconds='60'>
      <method_context/>
    </exec_method>
    <exec_method name='stop' type='method' exec='/lib/svc/method/postgresql stop' timeout_seconds='60'>
      <method_context/>
    </exec_method>
    <exec_method name='refresh' type='method' exec='/lib/svc/method/postgresql refresh' timeout_seconds='60'>
      <method_context/>
    </exec_method>
    <property_group name='general' type='framework'>
      <propval name='action_authorization' type='astring' value='solaris.smf.manage.postgres'/>
      <propval name='value_authorization' type='astring' value='solaris.smf.value.postgres'/>
    </property_group>
    <instance name='version_81' enabled='false'>
      <method_context project=':default' resource_pool=':default' working_directory=':default'>
        <method_credential group='postgres' limit_privileges=':default' privileges=':default' supp_groups=':default' user='postgres'/>
      </method_context>
      <property_group name='postgresql' type='application'>
        <propval name='value_authorization' type='astring' value='solaris.smf.value.postgres'/>
        <propval name='bin' type='astring' value='/usr/bin'/>
        <propval name='data' type='astring' value='/var/lib/pgsql/data'/>
        <propval name='log' type='astring' value='server.log'/>
      </property_group>
    </instance>
    <instance name='version_82' enabled='true'>
      <method_context project=':default' resource_pool=':default' working_directory=':default'>
        <method_credential group='postgres' limit_privileges=':default' privileges=':default' supp_groups=':default' user='postgres'/>
      </method_context>
      <property_group name='postgresql' type='application'>
        <propval name='value_authorization' type='astring' value='solaris.smf.value.postgres'/>
        <propval name='bin' type='astring' value='/usr/postgres/8.2/bin'/>
        <propval name='data' type='astring' value='/var/postgres/8.2/data'/>
        <propval name='log' type='astring' value='server.log'/>
      </property_group>
    </instance>
    <instance name='version_82_64bit' enabled='false'>
      <method_context project=':default' resource_pool=':default' working_directory=':default'>
        <method_credential group='postgres' limit_privileges=':default' privileges=':default' supp_groups=':default' user='postgres'/>
      </method_context>
      <property_group name='postgresql' type='application'>
        <propval name='bin' type='astring' value='/usr/postgres/8.2/bin/64'/>
        <propval name='data' type='astring' value='/var/postgres/8.2/data_64'/>
        <propval name='log' type='astring' value='server.log'/>
        <propval name='value_authorization' type='astring' value='solaris.smf.value.postgres'/>
      </property_group>
    </instance>
    <stability value='Evolving'/>
    <template>
      <common_name>
        <loctext xml:lang='C'>PostgreSQL RDBMS</loctext>
      </common_name>
      <documentation>
        <manpage title='postgres_82' section='5'/>
        <doc_link name='postgresql.org' uri='http://postgresql.org'/>
      </documentation>
    </template>
  </service>
</service_bundle>

Try doing this:

svccfg export svc:/application/database/postgresql > postgres.xml

Edit postgres.xml and add another <instance></instance> stanza after last </instance> tag, containing parameters related to your /usr/local installation. It might look like this (I named new instance "usr-local" here, you can choose any name you like):

<instance name='usr-local' enabled='false'>
      <method_context project=':default' resource_pool=':default' working_directory=':default'>
        <method_credential group='postgres'  limit_privileges=':default' privileges=':default' supp_groups=':default'  user='postgres'/>
      </method_context>
      <property_group name='postgresql' type='application'>
        <propval name='bin' type='astring' value='/usr/local/pgsql/bin'/>
        <propval name='data' type='astring' value='/usr/local/pgsql/data'/>
        <propval name='log' type='astring' value='server.log'/>
        <propval name='value_authorization' type='astring' value='solaris.smf.value.postgres'/>
      </property_group>
    </instance>

Import new service into SMF repository:

svccfg import postgres.xml
2 Likes

That did it! Thanks a bunch. Something I've been working on on/off, for the last week or so.