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>
354 lines
9.6 KiB
Bash
Executable file
354 lines
9.6 KiB
Bash
Executable file
#!/bin/bash
|
||
#
|
||
# Copyright 2015 Theke Solutions
|
||
# Copyright 2016 Koha-Suomi
|
||
# Copyright 2018 The National Library of Finland, University of Helsinki
|
||
#
|
||
# This file is part of Koha.
|
||
#
|
||
# 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 Z39.50/SRU daemons for your Koha instances.
|
||
|
||
Usage:
|
||
$scriptname --start|--stop|--restart [--quiet|-q] instancename1 [instancename2...]
|
||
$scriptname --enable|--disable instancename1 [instancename2]
|
||
$scriptname -h|--help
|
||
|
||
--start Start the Z39.50/SRU daemon for the specified instances
|
||
--stop Stop the Z39.50/SRU daemon for the specified instances
|
||
--restart Restart the Z39.50/SRU daemon for the specified instances
|
||
--enable Enable Z39.50/SRU for the specified instances
|
||
--disable Disable Z39.50/SRU for the specified instances
|
||
--debugger Enable running Z39.50/SRU in debug mode
|
||
--debugger-key Specify the key the IDE is expecting
|
||
--debugger-location Specify the host:port for your debugger tool (defaults
|
||
to localhost:9000)
|
||
--debugger-path Specify the path for the debugger library
|
||
--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_z3950()
|
||
{
|
||
local instancename=$1
|
||
|
||
local PIDFILE="/var/run/koha/${instancename}/z3950-responder.pid"
|
||
local NAME="${instancename}-koha-z3950-responder"
|
||
local CONFIGDIR="/etc/koha/z3950"
|
||
|
||
if [ -e "/etc/koha/sites/${instancename}/z3950/config.xml" ]; then
|
||
# pick instance-specific config dir
|
||
CONFIGDIR="/etc/koha/sites/${instancename}/z3950"
|
||
fi # else stick with the default one
|
||
|
||
_check_and_fix_perms $instancename
|
||
|
||
instance_user="${instancename}-koha"
|
||
|
||
daemonize="-D -d ${instancename}-koha-z3950"
|
||
logging="-l /var/log/koha/${instancename}/z3950.log"
|
||
|
||
if [ "$DEV_INSTALL" = "1" ]; then
|
||
MISCDIR=$KOHA_HOME/misc
|
||
else
|
||
MISCDIR=/usr/share/koha/bin
|
||
fi
|
||
|
||
Z3950RESPONDER="/usr/bin/perl $MISCDIR/z3950_responder.pl"
|
||
if [ "$debug_mode" = "yes" ]; then
|
||
if [ "$DEV_INSTALL" = "1" ]; then
|
||
warn "Not a dev install, disabling debug mode"
|
||
else
|
||
environment="development"
|
||
daemonize=""
|
||
logging="" # remote debugger takes care
|
||
Z3950RESPONDER="/usr/bin/perl -d ${MISCDIR}/z3950_responder.pl"
|
||
fi
|
||
fi
|
||
|
||
Z3950OPTS="-c ${CONFIGDIR} \
|
||
-u ${instance_user} \
|
||
-p ${PIDFILE} ${daemonize} ${logging}"
|
||
|
||
if ! is_z3950_running ${instancename}; then
|
||
export KOHA_CONF="/etc/koha/sites/${instancename}/koha-conf.xml"
|
||
|
||
log_daemon_msg "Starting Z39.50/SRU daemon for ${instancename}"
|
||
|
||
# Change to the instance's user dir
|
||
current_dir=$(pwd)
|
||
eval cd ~$instance_user
|
||
|
||
if ${Z3950RESPONDER} ${Z3950OPTS}; then
|
||
log_end_msg 0
|
||
else
|
||
log_end_msg 1
|
||
fi
|
||
# Go back to the original dir
|
||
cd "$current_dir"
|
||
|
||
else
|
||
log_daemon_msg "Error: Z39.50/SRU already running for ${instancename}"
|
||
log_end_msg 1
|
||
fi
|
||
}
|
||
|
||
stop_z3950()
|
||
{
|
||
local instancename=$1
|
||
|
||
local PIDFILE="/var/run/koha/${instancename}/z3950-responder.pid"
|
||
|
||
if is_z3950_running ${instancename}; then
|
||
|
||
log_daemon_msg "Stopping Z39.50/SRU daemon for ${instancename}"
|
||
|
||
if start-stop-daemon --pidfile ${PIDFILE} --stop --retry=TERM/30/KILL/5; then
|
||
log_end_msg 0
|
||
else
|
||
log_end_msg 1
|
||
fi
|
||
else
|
||
log_daemon_msg "Error: Z39.50/SRU not running for ${instancename}"
|
||
log_end_msg 1
|
||
fi
|
||
}
|
||
|
||
restart_z3950()
|
||
{
|
||
local instancename=$1
|
||
|
||
local PIDFILE="/var/run/koha/${instancename}/z3950.pid"
|
||
|
||
if is_z3950_running ${instancename}; then
|
||
|
||
log_daemon_msg "Restarting Z39.50/SRU daemon for ${instancename}"
|
||
|
||
if stop_z3950 $instancename && start_z3950 $instancename; then
|
||
log_end_msg 0
|
||
else
|
||
log_end_msg 1
|
||
fi
|
||
else
|
||
log_daemon_msg "Z39.50/SRU not running for ${instancename}."
|
||
start_z3950 $instancename
|
||
fi
|
||
}
|
||
|
||
enable_z3950()
|
||
{
|
||
local instancename=$1
|
||
|
||
if [ ! -e /etc/koha/sites/${instancename}/koha-conf.xml ] ;
|
||
then
|
||
echo "No such instance: ${instancename}" > /dev/stderr
|
||
return 1
|
||
fi
|
||
|
||
local configdir=/etc/koha/sites/${instancename}/z3950
|
||
if [ -e ${configdir}/config.xml ]
|
||
then
|
||
[ "${quiet}" != "yes" ] && warn "Z39.50/SRU already enabled for $name"
|
||
return 1
|
||
fi
|
||
|
||
if [ ! -e ${configdir} ]
|
||
then
|
||
mkdir ${configdir}
|
||
fi
|
||
cp /etc/koha/z3950/* ${configdir}/
|
||
chown ${name}-koha:${name}-koha ${configdir}/*
|
||
chmod 600 ${configdir}/*
|
||
|
||
[ "${quiet}" != "yes" ] && warn "Z39.50/SRU enabled for $name - edit files in ${configdir} to configure"
|
||
return 0
|
||
}
|
||
|
||
disable_z3950()
|
||
{
|
||
local instancename=$1
|
||
|
||
if is_z3950_enabled $instancename; then
|
||
local configdir=/etc/koha/sites/${instancename}/z3950
|
||
mv ${configdir} ${configdir}.`date +%F_%T`
|
||
[ "${quiet}" != "yes" ] && warn "Z39.50/SRU disabled for ${instancename}"
|
||
return 0
|
||
else
|
||
[ "${quiet}" != "yes" ] && warn "Z39.50/SRU already disabled for ${instancename}"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
_check_and_fix_perms()
|
||
{
|
||
local instance=$1
|
||
|
||
local files="/var/log/koha/${instance}/z3950.log"
|
||
|
||
for file in ${files}
|
||
do
|
||
if [ ! -e "${file}" ]; then
|
||
touch ${file}
|
||
fi
|
||
chown "${instance}-koha":"${instance}-koha" ${file}
|
||
done
|
||
}
|
||
|
||
set_action()
|
||
{
|
||
if [ "$op" = "" ]; then
|
||
op=$1
|
||
else
|
||
die "Error: only one action can be specified."
|
||
fi
|
||
}
|
||
|
||
op=""
|
||
quiet="no"
|
||
debug_mode="no"
|
||
debugger_key=""
|
||
debugger_location="localhost:9000"
|
||
debugger_path=""
|
||
|
||
# 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 ;;
|
||
--enable)
|
||
set_action "enable"
|
||
shift ;;
|
||
--disable)
|
||
set_action "disable"
|
||
shift ;;
|
||
--debugger)
|
||
debug_mode="yes"
|
||
shift ;;
|
||
--debugger-key)
|
||
debugger_key="$2"
|
||
shift 2 ;;
|
||
--debugger-location)
|
||
debugger_location="$2"
|
||
shift 2 ;;
|
||
--debugger-path)
|
||
debugger_path="$2"
|
||
shift 2 ;;
|
||
-*)
|
||
die "Error: invalid option switch ($1)" ;;
|
||
*)
|
||
# We expect the remaining stuff are the instance names
|
||
break ;;
|
||
esac
|
||
|
||
done
|
||
|
||
if [ $# -gt 0 ]; then
|
||
# We have at least one instance name
|
||
for name in "$@"; do
|
||
|
||
if is_instance $name; then
|
||
|
||
adjust_paths_dev_install $name
|
||
export DEV_INSTALL
|
||
export KOHA_HOME
|
||
PERL5LIB=$PERL5LIB:$KOHA_HOME/installer:$KOHA_HOME/lib/installer
|
||
# If debug mode is enabled, add the debugger lib path
|
||
# to PERL5LIB if appropriate
|
||
if [ "$debug_mode" = "yes" ]; then
|
||
if [ "$debugger_path" != "" ]; then
|
||
PERL5LIB="${debugger_path}":$PERL5LIB
|
||
fi
|
||
export PERL5DB="BEGIN { require q(${debugger_path}/perl5db.pl) }"
|
||
export PERLDB_OPTS="RemotePort=${debugger_location} async=1 LogFile=/var/log/koha/${name}/z3950-debug.log"
|
||
export DBGP_IDEKEY=${debugger_key}
|
||
export PERL5OPT="-d"
|
||
fi
|
||
|
||
export PERL5LIB
|
||
|
||
case $op in
|
||
"start")
|
||
start_z3950 $name
|
||
;;
|
||
"stop")
|
||
stop_z3950 $name
|
||
;;
|
||
"restart")
|
||
restart_z3950 $name
|
||
;;
|
||
"enable")
|
||
enable_z3950 $name
|
||
;;
|
||
"disable")
|
||
disable_z3950 $name
|
||
;;
|
||
*)
|
||
usage
|
||
;;
|
||
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
|