Intenté modificar este script para iniciar Motion usando las siguientes bibliotecas.
Empiezo el script ingresando el siguiente comando en la terminal:
sudo /etc/init.d/motion start
Lo que da:
start-stop-daemon: user '/etc/motion/motion.conf' not found
Starting motion detection daemon: motion failed!
Verifiqué tres veces que el archivo motion.conf tenga los permisos correctos y esté en el directorio /etc/motion/.
Si ingreso el siguiente comando en la terminal, Motion se inicia correctamente.
LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c /etc/motion/motion.conf
El guión está en marcha /etc/init.d
y se llama movimiento.
#!/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
Siguiendo la ayuda de Anthon y Mikeserv, aquí hay más información:
1) comando:ls -lrt /var/log
Da:
-rw-r----- 1 administrador raíz 122336 12 de octubre 08:10 auth.log
2) la entrada auth.log da:
08:10:26 raspberrypi sudo: pam_unix(sudo:session): sesión cerrada para el usuario root
Respuesta1
Reemplace las líneas LOAD_LIBRARIES....
con:
export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
Esto hace que la configuración LD_PRELOAD esté disponible para comandos/programas llamados desde el script (comomotion
y la lineaif start-stop-daemon --start ....
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion $DAEMON -c /etc/motion/motion.conf ; then
La start-stop-daemon
opción --chuid
toma como parámetro un nombre de usuario, por lo que espero motion
que sea ese nombre. Eso no deja ningún comando en la línea original, es por eso que debes insertar $DAEMON (la ruta completa a motion
) y su parámetro de línea de comando allí.
Respuesta2
Después de muchas horas de frustración y mucha ayuda de los miembros del foro, logré que funcione. De ninguna manera me atribuyo el mérito de esto al publicar una respuesta y agradezco toda la ayuda que la gente me ha brindado; pero para completar, así es como lo hice.
Agregué la línea export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so
en el script /etc/init.d/motion
y me aseguré de que la carpeta en la que estaba guardando mis imágenes tuviera los permisos para que el movimiento del usuario pudiera escribir en ella. ¡Opps!
#!/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