But when I do a 'service zm start', I get the following:
Starting ZoneMinder: /etc/init.d/zm: line 48: failure: command not found
Here is the code, just to assure you I have not fiddled with it; although that said there was no echo_success or echo_failure strings to replace! I presume this is because the documentation is for an older version of zoneminder. I have also indicated the line of code that seems to be causing the error:
Edit /etc/rc.d/zm with your favorite text editor (kwrite ?)
remove the line related to include functions
replace all occurences of echo_success by echo success
replace all occurences of echo_failure by echo failure
save the changes (ie :x!)
Hi there once again. I thought my problems were over but they are not. On a previous installation of zm, it only start sometimes but on the install I'm trying to do now it won't start at all. even though chkcconfig reports mysql, apache2 and zm as being 'on' something is not working correctly. When I issue the command chkconfig zm off it comes up with the following:
insserv: warning: script 'S02zm' missing LSB tags and overrides
insserv: warning: script 'zm' missing LSB tags and overrides
and when I do chkconfig zm on again, it comes up with
insserv: warning: script 'zm' missing LSB tags and overrides
I've used the LSB tags in my zm.init script included in the RPM. The tags are at the beginning of the file:
### BEGIN INIT INFO
# Provides: zm
# Required-Start: mysql apache2 $syslog $remote_fs
# Required-Stop: mysql apache2 $syslog $remote_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: starts the zone minder daemon
### END INIT INFO
This lines are used to determine the dependencies and default start/stop for the init script, e.g. which services should be enabled to start zm. This is very important because zm should start after mysql otherwise it cannot connect to the database. chkconfig uses this values to determine the correct start order and creates the links in the desired /etc/init.d/rc* directories.
The full init script can be found here http://liquid-co.de/pub/zm/scripts/zm.init (paths fits for the RPM if you want to use it you have to change them accordingly to your installation).
#!/bin/sh
# description: ZoneMinder is the top Linux video camera security and surveillance solution. ZoneMinder is intended for use in single or multi-camera video security applications.Copyright: Philip Coombes, Corey DeLasaux 2003-2008
# chkconfig: 2345 99 00
# processname: zmpkg.pl
# siehe auch http://liquid-co.de/pub/zm/scripts/zm.init
### BEGIN INIT INFO
# Provides: Zoneminder
# Should-Start: apache2
# Required-Start: mysql apache2 $syslog $remote_fs
## Should-Stop:
# Required-Stop: mysql apache2 $syslog $remote_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: Zoneminder
# Description: steuert Ãœberwachungskamera
# continued on second line by '#<TAB>'
### END INIT INFO
# http://de.opensuse.org/Paketbau/SUSE-Paketkonventionen/Init-Skripte#7.3._Kommentarkonventionen
# Required-Start gibt an, welche Facilities zum Starten und Ausführen dieses Dienstes verfügbar sein müssen. Das Init-Skriptsystem sollte sicher stellen, dass die benötigten Facilities gestartet werden, bevor das anfragende Skript gestartet wird.
# Should-Start ist ein optionales Feld. Die Funktion ist ähnlich der von Required-Start, definiert aber keine harten Abhängigkeiten. Falls ein unter Should-Start nicht installiert oder zum Starten aktiviert ist, wird dies stillschweigend ignoriert.
# Required-Stop gibt an, welche Facilities während des Abschalten des Dienstes immer noch aktiviert sein müssen. Das Init-Skriptsystem sollte ein Stoppen der hier aufgeführten Dienste vermeiden, bis das anfragende Skript gestoppt ist.
# Dieses Kopfdatum wird unter SUSE Linux/openSUSE zur zeit ignoriert, da dass SUSE-Boot-Skript-Konzept ein anderes Verknüpfungsschema nutzt (Weitere Informationen dazu finden Sie in der man page init.d(7)).
# Should-Stop ist ein optionales Feld. Die Funktion ist ähnlich der von Required-Stop, defniert aber keine harten Abhängigkeiten. Falls ein unter Should-Stop nicht installiert oder zum Starten aktiviert ist, wird dies stillschweigend ignoriert.
# Default-Start gibt an, in welchen runlevels der Dienst standardmäßig gestartet werden soll. Die runlevels wurden an SUSE Linux 7.1 geändert.
# Default-Stop gibt an, in welchen runlevels das Skript standardmäßig gestoppt werden soll.
# Dieses Kopfdatum wird unter SUSE Linux/openSUSE zur zeit ignoriert, da dass SUSE-Boot-Skript-Konzept ein anderes Verknüpfungsschema nutzt (Weitere Informationen dazu finden Sie in der man page init.d(7)).
# Check for existence of needed config file and read it
ZM_CONFIG=/usr/local/etc/zm.conf
loadconf() {
if [ -f $ZM_CONFIG ]; then
. $ZM_CONFIG
else
echo "ERROR: $ZM_CONFIG not found."
return 1
fi
}
# Read config
loadconf || return $?
# Check for missing binaries (stale symlinks should not happen)
# Note: Special treatment of stop for LSB conformance
ZM_BIN=$ZM_PATH_BIN/zmpkg.pl
ZM_SHARE_PATH=/usr/share/zm
LOCKFILE=/var/lock/subsys/zm
test -x $ZM_BIN || {
echo "$ZM_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5;
fi;
}
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v be verbose in local rc status and clear it afterwards
# rc_status -v -r ditto and clear both the local and overall rc status
# rc_status -s display "skipped" and exit with status 3
# rc_status -u display "unused" and exit with status 3
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num>
# rc_reset clear both the local and overall rc status
# rc_exit exit appropriate to overall rc status
# rc_active checks whether a service is activated by symlinks
. /etc/rc.status
# Reset status of this service
rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - user had insufficient privileges
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signaling is not supported) are
# considered a success.
zmupdate()
{
if [ -x $ZM_PATH_BIN/zm_update ]; then
$ZM_PATH_BIN/zm_update noi
fi
}
case "$1" in
########################################
start)
locked=0
if test -f $LOCKFILE ; then
echo "run zm_database_init first to create/update zm database"
rc_failed 1
locked=1
fi
echo -n "Starting ZoneMinder Daemon "
## Start daemon with startproc(8). If this fails
## the return value is set appropriately by startproc.
if (($locked != 1))
then
eval startproc -t 5 -f $ZM_BIN start &> /dev/null
fi
# Remember status and be verbose
rc_status -v
;;
########################################
stop)
locked=0
if test -f $LOCKFILE ; then
echo "run zm_database_init first to create/update zm database"
locked=1
fi
echo -n "Shutting down ZoneMinder Daemon "
## Stop daemon with killproc(8) and if this fails
## killproc sets the return value according to LSB.
$ZM_BIN stop &>/dev/null
ret=$?
if (($locked == 1))
then
:
else
$0 status &>/dev/null
retstatus=$?
# check weather unused
if (($retstatus == 3))
then
:
else
rc_failed 1
fi
fi
# Remember status and be verbose
rc_status -v
;;
########################################
try-restart|condrestart)
## Do a restart only if the service was active before.
## Note: try-restart is now part of LSB (as of 1.9).
## RH has a similar command named condrestart.
if test "$1" = "condrestart"; then
echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
fi
$0 status
if test $? = 0; then
$0 restart
else
rc_reset # Not running is not a failure.
fi
# Remember status and be quiet
rc_status
;;
########################################
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
########################################
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart.
echo -n "Reload service ZoneMinder "
## if it supports it:
eval startproc -f $ZM_BIN logrotate>/dev/null
#touch /var/run/FOO.pid
rc_status -v
## Otherwise:
#$0 try-restart
#rc_status
;;
########################################
reload)
## Like force-reload, but if daemon does not support
## signaling, do nothing (!)
# If it supports signaling:
echo -n "Reload service ZoneMinder "
eval startproc -f $ZM_BIN logrot > /dev/null
#touch /var/run/FOO.pid
rc_status -v
## Otherwise if it does not support reload:
#rc_failed 3
#rc_status -v
;;
########################################
status)
echo -n "Checking for service ZoneMinder "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
# Return value is slightly different for the status command:
# 0 - service up and running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running (unused)
# 4 - service status unknown :-(
# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
# NOTE: checkproc returns LSB compliant status values.
#checkproc $ZM_BIN
status=`$ZM_BIN status 2> /dev/null`
ret=$?
if (($ret == 0))
then
if [ $status == "stopped" ]
then
rc_failed 3
else
:
fi
else
rc_failed 4
fi
# NOTE: rc_status knows that we called this init script with
# "status" option and adapts its messages accordingly.
rc_status -v
;;
########################################
probe)
## Optional: Probe for the necessity of a reload, print out the
## argument to this init script which is required for a reload.
## Note: probe is not (yet) part of LSB (as of 1.9)
test /etc/zm.conf -nt /var/run/zm.pid && echo reload
;;
########################################
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"
exit 1
;;
esac
rc_exit