x108.html
Run Control
Each package may have a run control file that is used to:
-
Start, Stop, Restart, and reload the package.
-
Get the status of the package (running, not configured, ...).
-
Set the environment required by the package.
-
Run monthly, weekly, daily, hourly, and quarterly (15 minutes) cron jobs.
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 |