"Crontab -e" y comando directo

Discusión general sobre Raspberry Pi
Responder
Tic_sl
Pi Newbie
Pi Newbie
Mensajes: 3
Registrado: 20 Jul 2022, 11:06
Agradecido: 1 vez
Agradecimiento recibido: 0

Buenos días, tengo un problema, tengo un script en Python muy sencillo:

Un sensor de sonido que recoge cuando hay un sonido y si es así me activa el reproductor con un fichero mp3 y enciende un led durante 4 seg.
(solución que doy para callar al perro cuando ladra).

Pues bien si ejecuto el comando directo funciona perfectamente.
Pero lo quiero automatizad con "crontab -e" para que se ejecute en cada reinicio y funciona a media, me explico:
El script se ejecuta y sigue activo (es lo que quiero), ya que se enciende el led cuando hago sonido pero no reproduce el mp3.
Utilizo para reproducir el mp3 la utilidad "pygame".
También he utilizado "mplayer" y me pasa igual (se ejecuta el script pero no reproduce el mp3).
Os enseño el script y el comando directo:

Script python: (guardado en /home/admin/aplicacion)

Código: Seleccionar todo

import time
import RPi.GPIO as GPIO

from pygame import mixer 
mixer.init() 
mixer.music.load("/home/admin/aplicacion/perro.mp3") 
mixer.music.set_volume(2.0) 


SONIDO= 0
ESPERA = 4
PINLED = 10
PINSONIDO = 11
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PINLED, GPIO.OUT)
GPIO.setup(PINSONIDO, GPIO.IN)
while True:
      SONIDO = GPIO.input(PINSONIDO)
      if SONIDO == 1:
            mixer.music.play() 
            print ("hay sonido")
            GPIO.output(PINLED, GPIO.HIGH)
            time.sleep(ESPERA)
            mixer.music.stop() 
            GPIO.output(PINLED, GPIO.LOW)
            time.sleep(ESPERA)
comando directo:

admin@raspberrypi:~ $ python3 /home/admin/aplicacion/SensorSonidoLed.py (aquí funciona correctamente)

Orden en crontab:

PATH=/usr/bin:/bin:/home/admin/.local/bin
#* * * * * env > /tmp/cronenv
@reboot ( sleep 30 ; python3 /home/admin/aplicacion/SensorSonidoLed.py ) >/dev/>null 2>&1

Mi prooblema creo que esta al cargar la aplicación de reproducción, pero no sé como solucionarla.
Gracias
Gracias.
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

Podría ser un problema de permisos/propietarios.
Si ejecutas desde shell y funciona, bajo el usuario admin, quiere decir que el usuario admin tiene los permisos adecuados, está en el grupo con acceso a "sonido"
Pero cuando ejecutas desde crontab, estás ejecutando como root, que en tu caso no sé qué permisos tiene.

Para confirmarlo, haz "sudo -s" y entonces ejecuta el script como root

Código: Seleccionar todo

$ sudo -s
# python3 /home/admin/aplicacion/SensorSonidoLed.py
A ver si se ejecuta bien o no
Estos usuarios agradecieron al autor egrueda por el mensaje:
Tic_sl
Tic_sl
Pi Newbie
Pi Newbie
Mensajes: 3
Registrado: 20 Jul 2022, 11:06
Agradecido: 1 vez
Agradecimiento recibido: 0

Gracias. La cuestión es que se ejecuta perfectamente desde el Shell sin problemas. Pero desde el crontab (en modo usuario o root) se ejecuta el proceso pero a medias, no se reproduce nada con pygame o m player. No sé ando perdido.

Seguiré investigando. So encuentro el error, comento aqui.
Gracias
Gracias.
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

El tema de usar el @reboot de crond a lo mejor no es la mejor opción (hoy en día)
¿Por qué no lo ejecutas con un script de systemd donde te aseguras del usuario con el que se ejecuta, el log de ejecución, reiniciar si se mueren el proceso etc.
Responder