Operaciones con ficheros (copiar, borrar) desde tarea cron no funcionan

Sección General del foro
Responder
AngelF
Pi Newbie
Pi Newbie
Mensajes: 1
Registrado: 16 Mar 2024, 16:29
Agradecido: 0
Agradecimiento recibido: 0

Hola a todos.

Tengo una raspberry modelo 3A donde estoy recogiendo datos de varios sensores. Los datos los proceso con un script en python y los almaceno en un fichero datos.csv.

Quiero hacer una copia de seguridad del fichero datos.csv de forma periódica, cada 15 días. Para ello he preparado un script en php que hace lo siguiente:

- Comprime el fichero datos.csv mediante shellexec y 7z a un fichero ./ruta_copia_seg/datos_202403_001.7z. 202403 es el año y el mes y 001 es la primera copia, 002 será la segunda.
- Comprueba que la copia comprimida es correcta con 7z t ./ruta_copia_seg/datos_202403_001.7z. Para ello recojo la salida y busco la cadena "Everithing is Ok".
- Si todo va bien, borra el fichero datos.csv y copia una plantilla ./res/datos-vacio.csv a un nuevo fichero datos.csv en blanco para empezar a recoger datos.

Todo esto se hace de forma correcta si ejecuto el fichero php desde la terminal, pero, aquí está el problema, si lo hago desde una tarea cron, no funciona nada.

Tarea cron:
55 23 15,L * * sudo php /home/angel/run/opficheros.php >> /home/angel/run/opficheros.log 2 >> /home/angel/run/fallos.log

En la variable var/log/syslog obtengo el error:
Mar 16 15:51:01 raspberrypi CRON[4619]: (CRON) info (No MTA installed, discarding output)

Y el fichero fallos.log:
./ruta_copia_seg/datos_202403_002.7z comprimido correcto<br>2024-03-16 15:51:01 Hubo un error al copiar la plantilla.

Leyendo en foros, he visto que "No MTA..." es un fallo que se da cuando quieres enviar ficheros por email y se puede corregir instalando postfix, pero leo que esto instala un servidor SMTP. ¿Necesito un servidor SMTP para trabajar con ficheros en local desde una tarea cron?
Avatar de Usuario
egrueda
Pi God
Pi God
Mensajes: 3426
Registrado: 10 Feb 2017, 19:31
Agradecido: 7 veces
Agradecimiento recibido: 269 veces

El error "No MTA installed" es porque cron intenta enviar un correo para informar del resultado de la tarea, pero no sabe cómo enviar el correo.
Esta no es la causa del error, podemos ignorarlo por ahora.
Seguramente sea algo bueno recibir ese tipo de correos, pero lo podemos dejar para más adelante.

Me llama la atención que ejecutas "sudo php" para un script que se encuentra en el directorio personal de "angel"
Por un lado creo que es innecesario elevar privilegios con "sudo" y por otro lado te dará problemas de permisos hasta con los logs
Si haces login como "angel" y ejecutas "php /home/angel/run/opficheros.php" ¿funciona correctamente?

Por último, cuando tecleas "php" funciona porque la ruta del binario está en el path.
Pero si ejecutas desde cron (y con sudo) seguramente la variable $PATH no exista, por tanto le tienes que indicar en el cron la ruta completa hasta el binario de PHP. Puedes obtener la ruta completa con "which php"
Responder