NAME

    Solaris::ProcessContract - Manage Solaris process contracts via
    libcontract

VERSION

    1.01

DESCRIPTION

    This module allows you to use the libcontract(3) facility to manage
    contracts for your process and any child processes you create.

    The process contract system on solaris allows you to group together
    related processes for monitoring and resource limiting.

    By default, the child processes you create will live in the same
    contract group as the parent.

    The solaris smf init system uses contracts to manage the processes of
    running services. This allows it do things like restart the service if
    the number of processes in the contract that the service lives in drops
    to zero.

    This makes sense in most scenarios, like when your code is forking off
    copies of itself for parallelization, since a fault in one process
    probably means something is wrong with your entire service.

    However, if your code is forking off worker processes that are unrelated
    to the parent process, having them all in the same contract is
    troublesome.

    For example, if the parent process is a daemon that forks off unrelated
    worker processes, solaris will fail to detect when the number daemon
    processes has dropped to zero and the service is unavailable. Since the
    unrelated worker processes are in the same contract, those are counted
    against the "is the daemon still running?" checks.

    To solve this, you need to create a new contract group for any worker
    processes you fork, so that they have their own space for monitoring and
    resource limitations and do not affect the parent process.

    This is also a good practice for any code on solaris that forks off
    worker processes for long running or resource intensive jobs, as it
    allows for more accurate resource limits and better tracking of what
    resources are being used.

    See:

      man libcontract
      man contract
      man process
      man smf
      man svc.startd
      man ctrun

INSTALLATION

    The libcontract(3) facility was first made available on Solaris 10, so
    you need to be running at least that to install this module.

    This module will fail to install if it cannot find "libcontract" while
    running "Makefile.PL", but does no other checks to forcefully validate
    your operating system and version.

TODO

    Right now, this module gives you what you need to control the contract
    system when forking processes. That is going to be the most important
    need for most people writing daemon software in perl for solaris.

    Ideally, it could be expanded to be able to fully monitor and
    acknowledge contract system events.

    It also would be nice to have access to some of the deeper info when
    querying contracts, or maybe have a way to tie the proc filesystem in to
    the contract filesystem so that you could query both.

SEE ALSO

    Solaris::ProcessContract::Template
    Solaris::ProcessContract::Contract
    Solaris::ProcessContract::Exceptions
    libcontract(3)
    contract(4)
    process(4)

AUTHOR

    Danny Warren

COPYRIGHT

    Copyright (c) 2013, "AUTHOR".

LICENSE

    This library is free software, you can redistribute it and/or modify it
    under the same terms as Perl itself.