Ich habe versucht, dieses Skript zu ändern, um Motion mithilfe der folgenden Bibliotheken zu starten.
Ich starte das Skript, indem ich den folgenden Befehl ins Terminal eingebe:
sudo /etc/init.d/motion start
Das ergibt:
start-stop-daemon: user '/etc/motion/motion.conf' not found
Starting motion detection daemon: motion failed!
Ich habe dreimal überprüft, ob die Datei motion.conf über die richtigen Berechtigungen verfügt und sich im Verzeichnis /etc/motion/ befindet.
Wenn ich den folgenden Befehl ins Terminal eingebe, startet Motion korrekt.
LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c /etc/motion/motion.conf
Das Skript liegt vor /etc/init.d
und wird als „Motion“ bezeichnet.
#!/bin/sh -e
#
# /etc/init.d/motion: Start the motion detection
#
### BEGIN INIT INFO
# Provides: motion
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Motion detection
# Description: loads motion and assigns privileges
### END INIT INFO
# Ported to new debian way using sh and /lib/lsb/init-functions
# by Angel Carpintero <[email protected]>
# Modified by : Juan Angulo Moreno <[email protected]>
# eddy Petrisor <[email protected]>
# ArAge <[email protected]>
NAME=motion
PATH_BIN=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/bin/motion
PIDFILE=/var/run/$NAME.pid
DEFAULTS=/etc/default/$NAME
DESC="motion detection daemon"
export "LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so"
###########################################################################################################
### this above command is what is needed to be entered into terminal to run motion from command prompt ####
###########################################################################################################
ENV="env -i LANG=C PATH=$PATH_BIN"
. /lib/lsb/init-functions
test -x $DAEMON || exit 0
RET=0
[ -r "$DEFAULTS" ] && . "$DEFAULTS" || start_motion_daemon=yes
check_daemon_enabled () {
if [ "$start_motion_daemon" = "yes" ] ; then
return 0
else
log_warning_msg "Not starting $NAME daemon, disabled via /etc/default/$NAME"
return 1
fi
}
case "$1" in
start)
if check_daemon_enabled ; then
if ! [ -d /var/run/motion ]; then
mkdir /var/run/motion
fi
chown motion:motion /var/run/motion
chmod 777 /var/run/motion
# this is the fix we've added to allow the network share to be connected first before we try to start motion:
sleep 30
log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion $DAEMON -c /etc/motion/motion.conf ; then
log_end_msg 0
else
log_end_msg 1
RET=1
fi
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if start-stop-daemon --stop --oknodo --exec $DAEMON --retry 30 ; then
log_end_msg 0
else
log_end_msg 1
RET=1
fi
;;
reload|force-reload)
log_daemon_msg "Reloading $NAME configuration"
if start-stop-daemon --stop --signal HUP --exec $DAEMON ; then
log_end_msg 0
else
log_end_msg 1
RET=1
fi
;;
restart-motion)
if check_daemon_enabled ; then
log_action_begin_msg "Restarting $NAME"
if $0 stop && $0 start ; then
log_action_end_msg 0
else
log_action_cont_msg "(failed)"
RET=1
fi
fi
;;
restart)
$0 restart-motion
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}"
RET=1
;;
esac
exit $RET
Nach der Hilfestellung von Anthon und Mikeserv finden Sie hier weitere Informationen:
1) Befehl:ls -lrt /var/log
Gibt:
-rw-r----- 1 root adm 122336 Okt 12 08:10 auth.log
2) Der auth.log-Eintrag enthält:
08:10:26 raspberrypi sudo: pam_unix(sudo:session): Sitzung für Benutzer root geschlossen
Antwort1
Ersetzen Sie die Zeilen LOAD_LIBRARIES....
durch:
export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
Dadurch wird die Einstellung LD_PRELOAD für Befehle/Programme verfügbar, die vom Skript aufgerufen werden (wiemotion
Und die Linieif start-stop-daemon --start ....
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion $DAEMON -c /etc/motion/motion.conf ; then
Die start-stop-daemon
Option --chuid
verwendet als Parameter einen Benutzernamen, also erwarte ich, motion
dass es dieser Name ist. Dadurch bleibt kein Befehl in der Originalzeile übrig, deshalb sollten Sie motion
dort $DAEMON (den vollständigen Pfad zu ) und seinen Befehlszeilenparameter einfügen.
Antwort2
Nach vielen frustrierenden Stunden und mit viel Hilfe von Forumsmitgliedern habe ich es geschafft, es zum Laufen zu bringen. Ich gebührt nicht der Ehre, eine Antwort zu posten, und ich bin für all die Hilfe dankbar, die mir die Leute gegeben haben. Aber der Vollständigkeit halber: So habe ich es gemacht.
Ich habe die Zeile export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
zum Skript hinzugefügt /etc/init.d/motion
und sichergestellt, dass der Ordner, in dem ich meine Bilder gespeichert habe, über die erforderlichen Berechtigungen verfügte, damit der Benutzer Motion darin schreiben konnte – ups!
#!/bin/sh -e
#
# /etc/init.d/motion: Start the motion detection
#
### BEGIN INIT INFO
# Provides: motion
# Required-Start: $local_fs $syslog $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Motion detection
# Description: loads motion and assigns privileges
### END INIT INFO
# Ported to new debian way using sh and /lib/lsb/init-functions
# by Angel Carpintero <[email protected]>
# Modified by : Juan Angulo Moreno <[email protected]>
# eddy Petrisor <[email protected]>
# ArAge <[email protected]>
NAME=motion
PATH_BIN=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/bin/motion
PIDFILE=/var/run/$NAME.pid
DEFAULTS=/etc/default/$NAME
DESC="motion detection daemon"
ENV="env -i LANG=C PATH=$PATH_BIN"
. /lib/lsb/init-functions
test -x $DAEMON || exit 0
RET=0
[ -r "$DEFAULTS" ] && . "$DEFAULTS" || start_motion_daemon=yes
check_daemon_enabled () {
if [ "$start_motion_daemon" = "yes" ] ; then
return 0
else
log_warning_msg "Not starting $NAME daemon, disabled via /etc/default/$NAME"
return 1
fi
}
case "$1" in
start)
if check_daemon_enabled ; then
if ! [ -d /var/run/motion ]; then
mkdir /var/run/motion
fi
chown motion:motion /var/run/motion
#=================insert this line to load the uv4l libraries====
export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
#=================================================================
chmod 777 /var/run/motion
sleep 30
log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion ; then
log_end_msg 0
else
log_end_msg 1
RET=1
fi
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if start-stop-daemon --stop --oknodo --exec $DAEMON --retry 30 ; then
log_end_msg 0
else
log_end_msg 1
RET=1
fi
;;
reload|force-reload)
log_daemon_msg "Reloading $NAME configuration"
if start-stop-daemon --stop --signal HUP --exec $DAEMON ; then
log_end_msg 0
else
log_end_msg 1
RET=1
fi
;;
restart-motion)
if check_daemon_enabled ; then
log_action_begin_msg "Restarting $NAME"
if $0 stop && $0 start ; then
log_action_end_msg 0
else
log_action_cont_msg "(failed)"
RET=1
fi
fi
;;
restart)
$0 restart-motion
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|reload}"
RET=1
;;
esac
exit $RET