App-Daemon

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

        daemonize();
        sleep(10);

    you'll get a script that, when called from the command line, returns
    immediatly, but continues to run as a daemon for 10 seconds.

    Along with the common features offered by similar modules on CPAN, it

    *   supports logging with Log4perl: In background mode, it logs to a
        logfile. In foreground mode, log messages go directly to the screen.

    *   detects if another instance is already running and ends itself
        automatically in this case.

    *   shows with the 'status' command if an instance is already running
        and which PID it has:

            ./my-app status
            Pid file:    ./tt.pid
            Pid in file: 14914
            Running:     no
            Name match:  0

  Actions
    "App::Daemon" recognizes three different actions:

    my-app start
        will start up the daemon. "start" itself is optional, as this is the
        default action,

                $ ./my-app
                $

        will also run the 'start' action. By default, it will create a pid
        file and a log file in the current directory (named "my-app.pid" and
        "my-app.log". To change these locations, see the "-l" and "-p"
        options.

        If the -X option is given, the program is running in foreground mode
        for testing purposes:

                $ ./my-app -X
                ...

    stop
        will find the daemon's PID in the pidfile and send it a SIGTERM
        signal. It will verify $App::Daemon::kill_retries times if the
        process is still alive, with 1-second sleeps in between.

        To have App::Daemon send a different signal than SIGTERM (e.g.,
        SIGINT), set

            use POSIX;
            $App::Daemon::kill_sig = SIGINT;

        Note that his requires the numerial value (SIGINT via POSIX.pm), not
        a string like "SIGINT".

    status
        will print out diagnostics on what the status of the daemon is.
        Typically, the output looks like this:

            Pid file:    ./tt.pid
            Pid in file: 15562
            Running:     yes
            Name match:  1
                /usr/local/bin/perl -w test.pl

        This indicates that the pidfile says that the daemon has PID 15562
        and that a process with this PID is actually running at this moment.
        Also, a name grep on the process name in the process table results
        in 1 match, according to the output above.

        Note that the name match is unreliable, as it just looks for a
        command line that looks approximately like the script itself. So if
        the script is "test.pl", it will match lines like "perl -w test.pl"
        or "perl test.pl start", but unfortunately also lines like "vi
        test.pl".

        If the process is no longer running, the status output might look
        like this instead:

            Pid file:    ./tt.pid
            Pid in file: 14914
            Running:     no
            Name match:  0

        The status commands exit code complies with

            http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

        and returns

            0: if the process is up and running
            1: the process is dead but the pid file still exists
            3: the process is not running

        These constants are defined within App::Daemon to help writing test
        scripts:

            use constant LSB_OK               => 0;
            use constant LSB_DEAD_PID_EXISTS  => 1;
            use constant LSB_DEAD_LOCK_EXISTS => 2;
            use constant LSB_NOT_RUNNING      => 3;
            use constant LSB_UNKNOWN          => 4;
            use constant ALREADY_RUNNING      => 150;

  Command Line Options
    -X  Foreground mode. Log messages go to the screen.

    -l logfile
        Logfile to send Log4perl messages to in background mode. Defaults to
        "./[appname].log". Note that having a logfile in the current
        directory doesn't make sense except for testing environments, make
        sure to set this to somewhere within "/var/log" for production use.

    -u as_user
        User to run as if started as root. Defaults to 'nobody'.

    -g as_group
        Group to run as if started as root. Defaults to 'nogroup'.

    -l4p l4p.conf
        Path to Log4perl configuration file. Note that in this case the -v
        option will be ignored.

    -p pidfile
        Where to save the pid of the started process. Defaults to
        "./[appname].pid". Note that having a pidfile in the current
        directory doesn't make sense except for testing environments, make
        sure to set this to somewhere within "/var/run" for production use.

    -v  Increase default Log4perl verbosity from $INFO to $DEBUG. Note that
        this option will be ignored if Log4perl is initialized independently
        or if a user-provided Log4perl configuration file is used.



( run in 2.128 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )