Koha/debian/scripts/koha-zebra
Alex Buckley 3227b6136d
Bug 30684: When a service isn't running koha-* scripts --restart should start it
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>
2022-08-18 09:00:38 -03:00

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