Bewegungsstartsequenz – Shell-Skriptänderung

Bewegungsstartsequenz – Shell-Skriptänderung

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.dund 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-daemonOption --chuidverwendet als Parameter einen Benutzernamen, also erwarte ich, motiondass es dieser Name ist. Dadurch bleibt kein Befehl in der Originalzeile übrig, deshalb sollten Sie motiondort $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.sozum Skript hinzugefügt /etc/init.d/motionund 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

verwandte Informationen