freebsd-ports/irc/py-sopel/files/sopel.in
Jesús Daniel Colmenares Oviedo c73027b888 irc/py-sopel: New port
Sopel is a simple, lightweight, open source, easy-to-use IRC Utility
bot, written in Python. It's designed to be easy to use, run and
extend.

PR:		265807
Approved by:	Jesús Daniel Colmenares Oviedo (maintainer)
2023-04-29 00:40:54 +01:00

147 lines
3.6 KiB
Bash

#!/bin/sh
# PROVIDE: sopel
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Configuration settings for sopel in /etc/rc.conf
#
# sopel_enable (bool): Enable sopel. (default=NO)
# sopel_piddir (str): Directory in which to put the process ID file. (default=/var/run/sopel)
# sopel_confdir (str): Configuration directory. (default=%%ETCDIR%%)
# sopel_flags (str): Flags used for sopel. (default=--config-dir "${sopel_confdir}")
# sopel_script (str): Path to sopel application. (default=%%PREFIX%%/bin/sopel)
# sopel_user (str): User to run sopel as. (default=sopel)
# sopel_profiles (str): List of profiles for running multiple sopel instances.
# (default=default)
# sopel_prefix (str): Each profile or configuration file must begin with thix prefix
# followed by the profile name, followed by the extension .cfg,
# such as sopel-default.cfg, sopel-libera.chat.cfg, etc.
# (default=sopel-)
# sopel_output (str): Send stdout and stderr to a file. If you set the logdir parameter in
# the sopel file configuration, your best option is to send the output
# to /dev/null. But this can be changed for debugging.
# (default=/dev/null)
. /etc/rc.subr
name=sopel
rcvar=sopel_enable
desc="Simple, easy-to-use, open-source IRC utility bot, written in Python"
start_precmd=sopel_checkprofile
stop_precmd=sopel_checkprofile
start_cmd=sopel_start
stop_cmd=sopel_stop
restart_cmd=sopel_restart
status_cmd=sopel_status
configure_cmd=sopel_configure
extra_commands="configure status"
command_interpreter="%%PYTHON_CMD%%"
load_rc_config $name
: ${sopel_enable:=NO}
: ${sopel_piddir:=/var/run/sopel}
: ${sopel_confdir:=%%ETCDIR%%}
: ${sopel_flags=--config-dir "${sopel_confdir}"}
: ${sopel_script:=%%PREFIX%%/bin/sopel}
: ${sopel_user:=sopel}
: ${sopel_profiles:=default}
: ${sopel_prefix:=sopel-}
: ${sopel_output:=/dev/null}
sopel_checkprofile()
{
if ! [ -f "${sopel_confdir}/${sopel_prefix}${profile}.cfg" ]; then
echo "Sopel profile '${profile}' does not exist."
return 1
fi
return 0
}
sopel_start()
{
local profile
profile="$1"; shift
echo "Starting sopel profile '${profile}'." && sleep 1
daemon \
-o "${sopel_output}" \
-t "${desc}" \
-u "${sopel_user}" \
${command_interpreter} \
${sopel_script} start ${sopel_flags} \
-c "${sopel_prefix}${profile}" $@
}
sopel_stop()
{
local pid pidfile profile
profile="$1"; shift
pidfile="${sopel_piddir}/sopel-${sopel_prefix}${profile}.pid"
if ! [ -f "${pidfile}" ]; then
echo "sopel profile '${profile}' not running? (check ${sopel_piddir}/sopel-${sopel_prefix}${profile}.pid)."
return 1
fi
pid=`cat ${pidfile}`
echo "Stopping sopel profile '${profile}'."
daemon \
-o "${sopel_output}" \
${command_interpreter} \
${sopel_script} stop ${sopel_flags} \
-c "${sopel_prefix}${profile}" $@
wait_for_pids $pid
}
sopel_restart()
{
local profile
profile="$1"; shift
run_rc_command stop "${profile}" $@
run_rc_command start "${profile}" $@
}
sopel_status()
{
local profile pid
profile="$1"; shift
pid=`check_pidfile \
"${sopel_piddir}/sopel-${sopel_prefix}${profile}.pid" \
"${sopel_script}" \
"${command_interpreter}"`
if [ -n "${pid}" ]; then
echo "Sopel profile '${profile}' is running as pid ${pid}."
else
echo "Sopel profile '${profile}' is not running."
fi
}
sopel_configure()
{
local profile
profile="$1"; shift
echo "Configuring profile '${profile}'..."
${command_interpreter} \
${sopel_script} configure ${sopel_flags} \
-c "${sopel_confdir}/${sopel_prefix}${profile}" $@
}
cmd="$1"; shift
for profile in ${sopel_profiles}; do
run_rc_command "${cmd}" "${profile}" $@
done