sábado, 1 de mayo de 2010

Automatización copiado interno en FreeNAS

Aprovechando las capacidades que ofrece FreeNAS podemos definir un conjunto de automatismos para el servicio de servidor de contenido multimedia En este caso, un sistema de centralización de ficheros multimedia descargados mediante transmission y movidos automáticamente al destino de explotación de dicho contenido.

En lo que nos afecta a la configuración, los pasos a realizar son:
  1. Creación del script.
  2. Programación de la periodificación.
  3. Registro de actividad integrado en el sistema.

Definición del Script
Lo primero es crear un script que realice la tarea, al que llamamos move_cine.sh que tiene el contenido siguiente:

#!/bin/sh

# variables del programa
DIRORIGEN="/mnt/cfinterno/usr/transmission/TEMPORAL";
DIRDESTINO="/mnt/data/CINE/CINE13"

#inicio del programa
echo `date -j +"%d/%m/%Y %H:%M:%S"` move_cine.sh Inicio del proceso. >> /var/log/mediautils.log
for file in $DIRORIGEN/*.avi
do
if [ "$file" != "$DIRORIGEN/*.avi" ]; then
echo `date -j +"%d/%m/%Y %H:%M:%S"` move_cine.sh "$file" movido al destino. >> /var/log/mediautils.log
mv "$file" "$DIRDESTINO"
sleep 1
fi
done
echo `date -j +"%d/%m/%Y %H:%M:%S"` move_cine.sh Fin del proceso. >> /var/log/mediautils.log

Este script puede editarse posteriormente mediante la opción Avanzado|Editor de archivos siendo no necesario entrar por SSH/Telnet.


Automatización del script
En el menu del WebGUI podemos acceder a automatizar los procesos mediante la opción cron que ofrece FreeNAS, en el apartado Sistema|Avanzado|Cron.


Despues de asegurarnos que el script tiene los permisos de ejecución para el usuario que configuremos en el cron, ya podemos añadir la ruta del script creado y periodificar la ejecución.


Registro de actividad
Para acceder a los logs del script que hemos creado, debemos modificar el fichero de diag_loc.inc localizado en /usr/local/www/ la entrada en el menu del WebGUI para el nuevo log, tal que este integrado en el entorno. Para dicho fin, es necesario añadir el código siguiente:

$mediautils_logfile = rc_getenv_ex("mediautils_logfile", "{$g['varlog_path']}/mediautils.log");

[...]

array(
"visible" => TRUE,
"desc" => "MediaUtils",
"logfile" => $mediautils_logfile,
"filename" => "mediautils.log",
"type" => "plain",
"pattern" => "/^(\S+\s+\S+)\s+(\S+)\s+(.*)$/",
"columns" => array(
array(
"title" => gettext("Date & Time"),
"class" => "listlr", "param" => "nowrap=\"nowrap\"", "pmid" => 1),

array(
"title" => gettext("Service"),
"class" => "listr", "param" => "nowrap=\"nowrap\"", "pmid" => 2),

array(
"title" => gettext("Event"),
"class" => "listr", "param" => "", "pmid" => 3)

)
),


El resultado de las ejecuciones se puede ver accediendo por la opción del menu del WebGUI -> Diagnostico|Registro, en el apartado MediaUtils


Espero que sirva de referencia para futuros shell-scripts y potenciamiento del S.O. FreeBSD sobre el cual esta montado FreeNAS.

1 comentario:

rfksolutions dijo...

Extendiendo las capacidades en otros entornos, un ejemplo de automatización de copiado desde Windows Vista hacia el servidor mediante la opción de ROBOCOPY en un fichero de comandos bat.

@echo off
SETLOCAL
SET _source=.\misPELICULAS
SET _dest=\\SERVER\share\CINE
SET _what=*.avi
SET _options=/R:0 /W:0 /MOV
ROBOCOPY %_source% %_dest% %_what% %_options%