Bug 8773 - Start per-instance koha-index-daemon in .deb setup
Short: Launch an indexing daemon (rebuild_zebra.pl -daemon) process for each enabled instance. Enabling/disabling the use of the indexer is handled by global configuration variables in /etc/default/koha-common. Also provides command line tools to manage the running indexer daemons for your instances. Long: Using an indexing daemon avoids launching a new interpreter each time the cron triggers the indexing, and also allows sub-minute incremental reindexing, a requirement from our librarians.[1] Using the indexer daemon could remain "experimental" until it gets more testing; so is disabled by default initially. To enable the use of the indexer the user has to tweak the /etc/default/koha-common config file. Specifically the USE_INDEXER_DAEMON variable, which is clearly explained in the file. Frecquency defaults to 5 sec, and can be changed by tweaking the /etc/default/koha-common config file too. This patch uses rebuild_zebra.pl in daemon mode, but it is crafted to allow changing the indexing daemon and passing specific option switches it might need. Regards To+ [1] This is the .deb version of http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=8519 Sponsored-by: Universidad Nacional de Cordoba Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz> Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
parent
56ffda0a70
commit
eed7f263d0
|
|
@ -145,6 +145,13 @@
|
|||
<para>Stop Zebra for named Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>koha-indexer</option></term>
|
||||
<listitem>
|
||||
<para>Manage the indexer daemon for named Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,86 @@
|
|||
<article xmlns='http://docbook.org/ns/docbook'>
|
||||
<title>koha-indexer</title>
|
||||
<info>
|
||||
<productname>Koha</productname> is the first free software library automation package.
|
||||
<author>
|
||||
<orgname>The Koha Community</orgname>
|
||||
<uri>http://koha-community.org/</uri>
|
||||
</author>
|
||||
</info>
|
||||
|
||||
<refentry xml:id="koha-indexer">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>koha-indexer</refentrytitle>
|
||||
<manvolnum>8</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>koha-indexer</refname>
|
||||
<refpurpose>Manage the indexer daemon for Koha instances.</refpurpose>
|
||||
<refclass>UNIX/Linux</refclass>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>koha-indexer</command>
|
||||
<arg choice="req"><option>--start</option>|<option>--stop</option>|<option>--restart</option>|<option>--help</option>|<option>-h</option>|<option>--quiet</option>|<option>-q</option></arg>
|
||||
<arg choice="req" rep="repeat"><replaceable>instancename</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1><title>Options</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--start</option></term>
|
||||
<listitem>
|
||||
<para>Start the indexer daemon for the desired Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--stop</option></term>
|
||||
<listitem>
|
||||
<para>Stop the indexer daemon for the desired Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--restart</option></term>
|
||||
<listitem>
|
||||
<para>Restart the indexer daemon for the desired Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--quiet|-q</option></term>
|
||||
<listitem>
|
||||
<para>Make the script quiet about non existent instance names. Useful when calling <command>koha-indexer</command> from another scripts.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--help|-h</option></term>
|
||||
<listitem>
|
||||
<para>Show usage information.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>Description</title>
|
||||
<para>The <command>koha-indexer</command> script lets you manage your Koha instances indexer daemon.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>See also</title>
|
||||
<simplelist type="inline">
|
||||
<member><command>/etc/default/koha-common</command></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
</article>
|
||||
|
|
@ -6,5 +6,6 @@
|
|||
SHELL=/bin/sh
|
||||
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||||
|
||||
# Comment the following line if you want to use the experimental koha-index-daemon integration
|
||||
*/5 * * * * root test -x /usr/sbin/koha-rebuild-zebra && koha-rebuild-zebra -q $(koha-list --enabled)
|
||||
*/15 * * * * root koha-foreach --enabled --email /usr/share/koha/bin/cronjobs/process_message_queue.pl
|
||||
|
|
|
|||
|
|
@ -1,5 +1,40 @@
|
|||
## General koha-common default options
|
||||
## General koha-common default options file
|
||||
|
||||
PERL5LIB="/usr/share/koha/lib"
|
||||
KOHA_HOME="/usr/share/koha"
|
||||
|
||||
## Background record indexing
|
||||
#
|
||||
# The following options control the use of an indexing daemon for
|
||||
# Koha instances.
|
||||
#
|
||||
# More information can be found here:
|
||||
#
|
||||
# http://wiki.koha-community.org/wiki/PackagesIndexDaemon
|
||||
#
|
||||
# IMPORTANT: You should comment the relevant line in /etc/cron.d/koha-common
|
||||
# (the one that calls koha-rebuild-zebra)
|
||||
#
|
||||
# USE_INDEXER_DAEMON: "no" | "yes"
|
||||
#
|
||||
USE_INDEXER_DAEMON="no"
|
||||
|
||||
# Set an alternate indexer daemon. The default is to use the rebuild_zebra.pl
|
||||
# in daemon mode.
|
||||
#
|
||||
# Example: ALTERNATE_INDEXER_DAEMON="koha-index-daemon"
|
||||
#
|
||||
# ALTERNATE_INDEXER_DAEMON=""
|
||||
|
||||
# Lookup/indexing frecquency (in seconds) for the indexing daemon.
|
||||
#
|
||||
# The default value is 5
|
||||
#
|
||||
INDEXER_TIMEOUT=5
|
||||
|
||||
# Parameters to be passed to the indexer daemon. Useful for alternate indexers.
|
||||
# Defaults to INDEXER_PARAMS="-daemon -x -sleep $INDEXER_TIMEOUT"
|
||||
#
|
||||
# INDEXER_PARAMS=""
|
||||
|
||||
## End of general koha-common default options
|
||||
|
|
|
|||
|
|
@ -49,6 +49,10 @@ do_start()
|
|||
koha-create-dirs $(koha-list)
|
||||
koha-start-zebra $(koha-list --enabled)
|
||||
koha-start-sip $(koha-list --enabled)
|
||||
|
||||
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
|
||||
koha-indexer --start --quiet $(koha-list --enabled)
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
|
|
@ -59,6 +63,10 @@ do_stop()
|
|||
# We stop everything, including disabled ones.
|
||||
koha-stop-zebra $(koha-list) || true
|
||||
koha-stop-sip $(koha-list) || true
|
||||
|
||||
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
|
||||
koha-indexer --stop --quiet $(koha-list --enabled)
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
|
|
@ -68,6 +76,10 @@ do_reload() {
|
|||
koha-restart-zebra $(koha-list --enabled)
|
||||
koha-stop-sip $(koha-list) || true
|
||||
koha-start-sip $(koha-list --enabled)
|
||||
|
||||
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
|
||||
koha-indexer --restart --quiet $(koha-list --enabled)
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ debian/scripts/koha-email-disable usr/sbin
|
|||
debian/scripts/koha-email-enable usr/sbin
|
||||
debian/scripts/koha-enable usr/sbin
|
||||
debian/scripts/koha-foreach usr/sbin
|
||||
debian/scripts/koha-indexer usr/sbin
|
||||
debian/scripts/koha-list usr/sbin
|
||||
debian/scripts/koha-mysql usr/sbin
|
||||
debian/scripts/koha-rebuild-zebra usr/sbin
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/koha-common ] && . /etc/default/koha-common
|
||||
|
||||
set -e
|
||||
|
||||
|
|
@ -642,6 +644,11 @@ then
|
|||
|
||||
# Start Zebra.
|
||||
koha-start-zebra "$name"
|
||||
|
||||
if [ "$USE_INDEXER_DAEMON" = "yes" ]; then
|
||||
# Start Indexer daemon
|
||||
koha-indexer --start "$name"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -108,6 +108,19 @@ is_zebra_running()
|
|||
fi
|
||||
}
|
||||
|
||||
is_indexer_running()
|
||||
{
|
||||
local instancename=$1
|
||||
|
||||
if daemon --name="$instancename-koha-indexer" \
|
||||
--user="$instancename-koha.$instancename-koha" \
|
||||
--running ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_instances()
|
||||
{
|
||||
find /etc/koha/sites -mindepth 1 -maxdepth 1\
|
||||
|
|
|
|||
|
|
@ -0,0 +1,233 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# koha-indexer - Manage Indexer Daemons for Koha instances
|
||||
# Copyright 2014 Tomás Cohen Arazi @ Universidad Nacional de Córdoba
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
set -e
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/koha-common ] && . /etc/default/koha-common
|
||||
|
||||
# include helper functions
|
||||
if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
|
||||
. "/usr/share/koha/bin/koha-functions.sh"
|
||||
else
|
||||
echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
usage()
|
||||
{
|
||||
local scriptname=$(basename $0)
|
||||
|
||||
cat <<EOF
|
||||
$scriptname
|
||||
|
||||
This script lets you manage the indexer daemon for your Koha instances.
|
||||
|
||||
Usage:
|
||||
$scriptname [--start|--stop|--restart] [--quiet|-q] instancename1 [instancename2...]
|
||||
$scriptname -h|--help
|
||||
|
||||
--start Start the indexer daemon for the specified instances
|
||||
--stop Stop the indexer daemon for the specified instances
|
||||
--restart Restart the indexer daemon for the specified instances
|
||||
--quiet|-q Make the script quiet about non existent instance names
|
||||
(useful for calling from another scripts).
|
||||
--help|-h Display this help message
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
start_indexer()
|
||||
{
|
||||
local name=$1
|
||||
|
||||
if ! is_indexer_running $name; then
|
||||
export KOHA_CONF="/etc/koha/sites/$name/koha-conf.xml"
|
||||
|
||||
DAEMONOPTS="--name=$name-koha-indexer \
|
||||
--errlog=/var/log/koha/$name/indexer-error.log \
|
||||
--stdout=/var/log/koha/$name/indexer.log \
|
||||
--output=/var/log/koha/$name/indexer-output.log \
|
||||
--verbose=1 --respawn --delay=30 \
|
||||
--user=$name-koha.$name-koha"
|
||||
|
||||
log_daemon_msg "Starting Koha indexing daemon for $name"
|
||||
|
||||
if daemon $DAEMONOPTS -- $INDEXER_DAEMON $INDEXER_PARAMS; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
fi
|
||||
else
|
||||
log_daemon_msg "Error: Indexer already running for $name"
|
||||
log_end_msg 1
|
||||
fi
|
||||
}
|
||||
|
||||
stop_indexer()
|
||||
{
|
||||
local name=$1
|
||||
|
||||
if is_indexer_running $name; then
|
||||
export KOHA_CONF="/etc/koha/sites/$name/koha-conf.xml"
|
||||
|
||||
DAEMONOPTS="--name=$name-koha-indexer \
|
||||
--errlog=/var/log/koha/$name/indexer-error.log \
|
||||
--stdout=/var/log/koha/$name/indexer.log \
|
||||
--output=/var/log/koha/$name/indexer-output.log \
|
||||
--verbose=1 --respawn --delay=30 \
|
||||
--user=$name-koha.$name-koha"
|
||||
|
||||
log_daemon_msg "Stopping Koha indexing daemon for $name"
|
||||
|
||||
if daemon $DAEMONOPTS --stop -- $INDEXER_DAEMON $INDEXER_PARAMS; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
fi
|
||||
else
|
||||
log_daemon_msg "Error: Indexer not running for $name"
|
||||
log_end_msg 1
|
||||
fi
|
||||
}
|
||||
|
||||
restart_indexer()
|
||||
{
|
||||
local name=$1
|
||||
|
||||
if is_indexer_running $name; then
|
||||
export KOHA_CONF="/etc/koha/sites/$name/koha-conf.xml"
|
||||
|
||||
DAEMONOPTS="--name=$name-koha-indexer \
|
||||
--errlog=/var/log/koha/$name/indexer-error.log \
|
||||
--stdout=/var/log/koha/$name/indexer.log \
|
||||
--output=/var/log/koha/$name/indexer-output.log \
|
||||
--verbose=1 --respawn --delay=30 \
|
||||
--user=$name-koha.$name-koha"
|
||||
|
||||
log_daemon_msg "Stopping Koha indexing daemon for $name"
|
||||
|
||||
if daemon $DAEMONOPTS --restart -- $INDEXER_DAEMON $INDEXER_PARAMS; then
|
||||
log_end_msg 0
|
||||
else
|
||||
log_end_msg 1
|
||||
fi
|
||||
else
|
||||
log_daemon_msg "Error: Indexer not running for $name"
|
||||
log_end_msg 1
|
||||
fi
|
||||
}
|
||||
|
||||
set_action()
|
||||
{
|
||||
if [ "$op" = "" ]; then
|
||||
op=$1
|
||||
else
|
||||
die "Error: only one action can be specified."
|
||||
fi
|
||||
}
|
||||
|
||||
op=""
|
||||
quiet="no"
|
||||
|
||||
# Read command line parameters
|
||||
while [ $# -gt 0 ]; do
|
||||
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
usage ; exit 0 ;;
|
||||
-q|--quiet)
|
||||
quiet="yes"
|
||||
shift ;;
|
||||
--start)
|
||||
set_action "start"
|
||||
shift ;;
|
||||
--stop)
|
||||
set_action "stop"
|
||||
shift ;;
|
||||
--restart)
|
||||
set_action "restart"
|
||||
shift ;;
|
||||
-*)
|
||||
die "Error: invalid option switch ($1)" ;;
|
||||
*)
|
||||
# We expect the remaining stuff are the instance names
|
||||
break ;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
# Check if an alternate indexer has been set
|
||||
if [ -z $ALTERNATE_INDEXER_DAEMON ]; then
|
||||
INDEXER_DAEMON="$ALTERNATE_INDEXER_DAEMON"
|
||||
else
|
||||
# We default to rebuild_zebra.pl if no alternate indexer set
|
||||
INDEXER_DAEMON="${KOHA_HOME}/bin/migration_tools/rebuild_zebra.pl"
|
||||
fi
|
||||
|
||||
if [ $INDEXER_TIMEOUT -lt 1 ]; then
|
||||
# Something's wrong, default to 5 seconds
|
||||
INDEXER_TIMEOUT=5
|
||||
fi
|
||||
|
||||
if [ -z $INDEXER_PARAMS ]; then
|
||||
# Default to the parameters required by rebuild_zebra.pl
|
||||
INDEXER_PARAMS="-daemon -x -sleep $INDEXER_TIMEOUT"
|
||||
fi
|
||||
|
||||
if [ -z $PERL5LIB ]; then
|
||||
PERL5LIB="/usr/share/koha/lib"
|
||||
fi
|
||||
|
||||
export PERL5LIB
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
# We have at least one instance name
|
||||
for name in "$@"; do
|
||||
|
||||
if is_instance $name; then
|
||||
|
||||
case $op in
|
||||
"start")
|
||||
start_indexer $name
|
||||
;;
|
||||
"stop")
|
||||
stop_indexer $name
|
||||
;;
|
||||
"restart")
|
||||
restart_indexer $name
|
||||
;;
|
||||
esac
|
||||
|
||||
else
|
||||
if [ "$quiet" = "no" ]; then
|
||||
log_daemon_msg "Error: Invalid instance name $name"
|
||||
log_end_msg 1
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
else
|
||||
if [ "$quiet" = "no" ]; then
|
||||
warn "Error: you must provide at least one instance name"
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Loading…
Reference in New Issue