Run Control

Each package may have a run control file that is used to:

Run control under OpenPKG is very similar to the SYSV style scripts with a little FreeBSD thrown in for good measure. Each package may have a %{l_prefix}/etc/rc.d/rc.$packagename file which is a plain ascii file with sections to handle the various functions (start, stop, status, environment, %{l_prefix}/etc/rc.conf file. All run control is done by the %%l_prefix}/etc/rc script.


    %{l_prefix}/etc/rc ($package|all) command [command..]

Where command may be env, stop, start, restart, reload, status, hourly, daily, weekly, etc.

The apache run control file is probably a good example with all the sections:


#!/home/csoft/freebsd48/lib/openpkg/bash /home/csoft/freebsd48/etc/rc
##
##  rc.apache -- Run-Commands
##

%config
    apache_enable="$openpkg_rc_def"
    apache_log_files="/home/csoft/freebsd48/var/apache/log/access.log"
    apache_log_prolog="true"
    apache_log_epilog="true"
    apache_log_numfiles="10"
    apache_log_minsize="1M"
    apache_log_complevel="9"
    apache_err_files="/home/csoft/freebsd48/var/apache/log/error.log"
    apache_err_prolog="true"
    apache_err_epilog="true"
    apache_err_numfiles="10"
    apache_err_minsize="1M"
    apache_err_complevel="9"

%status -u root -o
    apache_usable="no"
    apache_active="no"
    /home/csoft/freebsd48/sbin/apachectl configtest 2>/dev/null && apache_usable="yes"
    ( eval `grep "^PIDFILE=" /home/csoft/freebsd48/sbin/apachectl`
      [ ".$PIDFILE" != . -a -f "$PIDFILE" ] && kill -0 `cat $PIDFILE`
    ) && apache_active="yes"
    echo "apache_enable=\"$apache_enable\""
    echo "apache_usable=\"$apache_usable\""
    echo "apache_active=\"$apache_active\""

%start -u root
    rcService apache enable yes || exit 0
    rcService apache active yes && exit 0
    /home/csoft/freebsd48/sbin/apachectl start

%stop -u root
    rcService apache enable yes || exit 0
    rcService apache active no  && exit 0
    /home/csoft/freebsd48/sbin/apachectl stop
    sleep 2

%restart -u root
    rcService apache enable yes || exit 0
    rcService apache active no  && exit 0
    /home/csoft/freebsd48/sbin/apachectl restart

%daily -u root
    rcService apache enable yes || exit 0

    if [ ".$apache_log_files" != . ]; then
        #   rotate logfile
        shtool rotate -f \
            -n ${apache_log_numfiles} -s ${apache_log_minsize} -d \
            -z ${apache_log_complevel} -m 644 -o root -g csoftmgr \
            -P "${apache_log_prolog}" \
            -E "${apache_log_epilog} && rc apache restart" \
            $apache_log_files
    fi

    if [ ".$apache_err_files" != . ]; then
        #   rotate errfile
        shtool rotate -f \
            -n ${apache_err_numfiles} -s ${apache_err_minsize} -d \
            -z ${apache_err_complevel} -m 644 -o root -g csoftmgr \
            -P "${apache_err_prolog}" \
            -E "${apache_err_epilog} && rc apache restart" \
            $apache_err_files
    fi