Koha/debian/scripts/koha-start-zebra
Dobrica Pavlinusic 180faa9260 Bug 10670: ensure koha-start-zebra sets problem permissions for logs
If koha-common is started when Zebra log files are owned by root
it will fail to start without any useful message (since Zebra can't
write errors in log files because it lacks permissions to do so).

This patch creates empty log files and ensure they have correct
permissions.

I can't pin-point why log files gets owned root, but I suspect it
has something to do with Zebra crashing and logrotate, but this is
just theory. We have seen this behaviour since koha 3.1 every
few months, and every time it happends we have root owned logs and
crashed Zebra so this patch will at least help sites which have
some kind of automatic koha-common start if it's not running.

Signed-off-by: Robin Sheat <robin@catalyst.net.nz>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2013-11-14 23:53:10 +00:00

140 lines
3.5 KiB
Bash
Executable file

#!/bin/sh
#
# koha-start-zebra - Start Zebra for named Koha instances
# 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
die()
{
echo "$@" 1>&2
exit 1
}
warn()
{
echo "$@" 1>&2
}
is_enabled()
{
local instancename=$1
if ! is_instance $instancename; then
return 1
fi
if grep -q '^[[:space:]]*Include /etc/koha/apache-shared-disable.conf' \
"/etc/apache2/sites-available/$instancename" ; then
return 1
else
return 0
fi
}
is_instance()
{
local instancename=$1
if find /etc/koha/sites -mindepth 1 -maxdepth 1 \
-type d -printf '%f\n'\
| grep -q -x $instancename ; then
return 0
else
return 1
fi
}
is_zebra_running()
{
local instancename=$1
if daemon --name="$instancename-koha-zebra" \
--user="$instancename-koha.$instancename-koha" \
--running ; then
return 0
else
return 1
fi
}
start_zebra_instance()
{
local instancename=$1
if is_enabled $instancename; then
echo "Starting Zebra server for $instancename"
touch "/var/log/koha/$instancename/zebra-error.log" \
"/var/log/koha/$instancename/zebra.log" \
"/var/log/koha/$instancename/zebra-output.log"
chown "$instancename-koha:$instancename-koha" \
"/var/log/koha/$instancename/zebra-error.log" \
"/var/log/koha/$instancename/zebra.log" \
"/var/log/koha/$instancename/zebra-output.log"
daemon \
--name="$instancename-koha-zebra" \
--errlog="/var/log/koha/$instancename/zebra-error.log" \
--stdout="/var/log/koha/$instancename/zebra.log" \
--output="/var/log/koha/$instancename/zebra-output.log" \
--verbose=1 \
--respawn \
--delay=30 \
--user="$instancename-koha.$instancename-koha" \
-- \
zebrasrv \
-v none,fatal,warn \
-f "/etc/koha/sites/$instancename/koha-conf.xml" && \
return 0
else
return 1
fi
}
usage()
{
local scriptname=$0
cat <<EOF
Starts Zebra for Koha instances.
Usage: $scriptname instancename1 instancename2...
EOF
}
# Parse command line.
#[ $# -ge 1 ] || ( usage ; die "Missing instance name..." )
# Loop through the instance names
for name in "$@"
do
if is_instance $name ; then
if is_enabled $name ; then
if ! is_zebra_running $name; then
if ! start_zebra_instance $name; then
warn "Something went wrong starting Zebra for $name."
fi
else
warn "Zebra already running for instance $name."
fi
else
warn "Instance $name disabled. No action taken."
fi
else
warn "Unknown instance $name."
fi
done
exit 0