Alex Buckley
3227b6136d
Test plan: 1. Stop plack, indexer, sip, worker, z3950 and zebra. Note: To test Z39.50 restarting you will need to setup the server: https://wiki.koha-community.org/wiki/Setting_up_the_Z39.50_and_SRU_Server#Setting_up_the_Z39.50_and_SRU_Server 2. Run restart command for each service: - [Plack] sudo koha-plack --restart {instance} - [Indexer] sudo koha-indexer --restart {instance} - [SIP] sudo koha-sip --restart {instance} - [Worker] sudo koha-worker --restart {instance} - [z3950] sudo koha-z3950-responder --restart {instance} - [Zebra] sudo koha-zebra --restart {instance} 3. Observe the services do not get restarted. Instead you get an error saying the service is not running 4. Apply patch 5. If you are using kohadevbox you must copy koha-* scripts to /usr/sbin/: sudo cp debian/scripts/koha-plack /usr/sbin/koha-plack sudo cp debian/scripts/koha-indexer /usr/sbin/koha-indexer sudo cp debian/scripts/koha-sip /usr/sbin/koha-sip sudo cp debian/scripts/koha-worker /usr/sbin/koha-worker sudo cp debian/scripts/koha-z3950-responder /usr/sbin/koha-z3950-responder sudo cp debian/scripts/koha-zebra /usr/sbin/koha-zebra 6. Repeat step 2 7. This time confirm that each service is restarted Sponsored-by: Catalyst IT Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
285 lines
7.3 KiB
Bash
Executable file
285 lines
7.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# koha-zebra - Manage Zebra daemons for Koha instances
|
|
# Copyright 2016 Theke Solutions
|
|
# Copyright 2010 Catalyst IT, Ltd
|
|
#
|
|
# 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 Zebra daemon for your Koha instances.
|
|
|
|
Usage:
|
|
$scriptname [--start|--stop|--restart] instancename1 [instancename2...]
|
|
$scriptname -h|--help
|
|
|
|
--start Start the Zebra daemon for the specified instance(s)
|
|
--stop Stop the Zebra daemon for the specified instance(s)
|
|
--restart Restart the Zebra daemon for the specified instance(s)
|
|
--status Show the status of the Zebra daemon for the specified instance(s)
|
|
--verbose|-v Display progress and actions messages
|
|
--help|-h Display this help message
|
|
|
|
EOF
|
|
}
|
|
|
|
start_zebra()
|
|
{
|
|
local name=$1
|
|
|
|
# get zebra log levels from koha-conf.xml
|
|
local loglevels=$(get_loglevels ${name})
|
|
local max_record_size=$(get_max_record_size ${name})
|
|
|
|
if ! is_zebra_running $name; then
|
|
|
|
_check_and_fix_perms ${name}
|
|
|
|
DAEMONOPTS="--name=${name}-koha-zebra \
|
|
--pidfiles=/var/run/koha/${name}/ \
|
|
--errlog=/var/log/koha/${name}/zebra-error.log \
|
|
--output=/var/log/koha/${name}/zebra-output.log \
|
|
--verbose=1 \
|
|
--respawn \
|
|
--delay=30 \
|
|
--user=${name}-koha.${name}-koha"
|
|
|
|
ZEBRA_PARAMS="-v $loglevels \
|
|
-k $max_record_size \
|
|
-f /etc/koha/sites/${name}/koha-conf.xml"
|
|
|
|
[ "$verbose" != "no" ] && \
|
|
log_daemon_msg "Starting Koha Zebra daemon for ${name}"
|
|
|
|
if daemon $DAEMONOPTS -- $ZEBRA_DAEMON $ZEBRA_PARAMS; then
|
|
([ "$verbose" != "no" ] && \
|
|
log_end_msg 0) || return 0
|
|
else
|
|
([ "$verbose" != "no" ] && \
|
|
log_end_msg 1) || return 1
|
|
fi
|
|
else
|
|
if [ "$verbose" != "no" ]; then
|
|
log_daemon_msg "Error: Zebra already running for ${name}"
|
|
log_end_msg 1
|
|
else
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
stop_zebra()
|
|
{
|
|
local name=$1
|
|
|
|
if is_zebra_running $name; then
|
|
|
|
DAEMONOPTS="--name=${name}-koha-zebra \
|
|
--pidfiles=/var/run/koha/${name}/ \
|
|
--errlog=/var/log/koha/${name}/zebra-error.log \
|
|
--output=/var/log/koha/${name}/zebra-output.log \
|
|
--verbose=1 \
|
|
--respawn \
|
|
--delay=30 \
|
|
--user=${name}-koha.${name}-koha"
|
|
|
|
[ "$verbose" != "no" ] && \
|
|
log_daemon_msg "Stopping Koha Zebra daemon for ${name}"
|
|
|
|
if daemon $DAEMONOPTS --stop -- $ZEBRA_DAEMON $ZEBRA_PARAMS; then
|
|
([ "$verbose" != "no" ] && \
|
|
log_end_msg 0) || return 0
|
|
else
|
|
([ "$verbose" != "no" ] && \
|
|
log_end_msg 1) || return 1
|
|
fi
|
|
else
|
|
if [ "$verbose" != "no" ]; then
|
|
log_daemon_msg "Error: Zebra not running for ${name}"
|
|
log_end_msg 1
|
|
else
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
restart_zebra()
|
|
{
|
|
local name=$1
|
|
|
|
if is_zebra_running ${name}; then
|
|
local noLF="-n"
|
|
[ "$verbose" != "no" ] && noLF=""
|
|
echo $noLF `stop_zebra ${name}`
|
|
echo $noLF `start_zebra ${name}`
|
|
else
|
|
if [ "$verbose" != "no" ]; then
|
|
log_daemon_msg "Zebra not running for ${name}."
|
|
start_zebra ${name}
|
|
else
|
|
start_zebra ${name}
|
|
return 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
zebra_status()
|
|
{
|
|
local name=$1
|
|
|
|
if is_zebra_running ${name}; then
|
|
log_daemon_msg "Zebra running for ${name}"
|
|
log_end_msg 0
|
|
else
|
|
log_daemon_msg "Zebra not running for ${name}"
|
|
log_end_msg 3
|
|
fi
|
|
}
|
|
|
|
_check_and_fix_perms()
|
|
{
|
|
local name=$1
|
|
|
|
local files="/var/log/koha/${name}/zebra-output.log \
|
|
/var/log/koha/${name}/zebra-error.log"
|
|
|
|
for file in ${files}
|
|
do
|
|
if [ ! -e "${file}" ]; then
|
|
touch ${file}
|
|
fi
|
|
chown "${name}-koha":"${name}-koha" ${file}
|
|
done
|
|
}
|
|
|
|
set_action()
|
|
{
|
|
if [ "$op" = "" ]; then
|
|
op=$1
|
|
else
|
|
die "Error: only one action can be specified."
|
|
fi
|
|
}
|
|
|
|
op=""
|
|
verbose="no"
|
|
|
|
# Backwards compatible with old koha-*-zebra scripts
|
|
# TODO: Remove once there's consensus to remove the legacy scripts
|
|
used_script_name=$(basename $0)
|
|
|
|
if [ "$used_script_name" != "koha-zebra" ]; then
|
|
warn "Deprecated script used (${used_script_name})"
|
|
|
|
case "$used_script_name" in
|
|
koha-start-zebra)
|
|
set_action "start" ;;
|
|
koha-stop-zebra)
|
|
set_action "stop" ;;
|
|
koha-restart-zebra)
|
|
set_action "restart" ;;
|
|
*)
|
|
break ;;
|
|
esac
|
|
fi
|
|
# / Backwards compatible handling code
|
|
|
|
# Read command line parameters
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case "$1" in
|
|
-h|--help)
|
|
usage ; exit 0 ;;
|
|
-v|--verbose)
|
|
verbose="yes"
|
|
shift ;;
|
|
--start)
|
|
set_action "start"
|
|
shift ;;
|
|
--stop)
|
|
set_action "stop"
|
|
shift ;;
|
|
--restart)
|
|
set_action "restart"
|
|
shift ;;
|
|
--status)
|
|
set_action "status"
|
|
shift ;;
|
|
-*)
|
|
die "Error: invalid option switch ($1)" ;;
|
|
*)
|
|
# We expect the remaining stuff are the instance names
|
|
break ;;
|
|
esac
|
|
|
|
done
|
|
|
|
ZEBRA_DAEMON=$(which zebrasrv)
|
|
|
|
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_zebra $name
|
|
;;
|
|
"stop")
|
|
stop_zebra $name
|
|
;;
|
|
"restart")
|
|
restart_zebra $name
|
|
;;
|
|
"status")
|
|
zebra_status $name
|
|
esac
|
|
|
|
else
|
|
if [ "$verbose" != "no" ]; then
|
|
log_daemon_msg "Error: Invalid instance name $name"
|
|
log_end_msg 1
|
|
fi
|
|
fi
|
|
|
|
done
|
|
else
|
|
if [ "$verbose" != "no" ]; then
|
|
warn "Error: you must provide at least one instance name"
|
|
fi
|
|
fi
|
|
|
|
exit 0
|