Programador de tareas CRONTAB
#1
Hola
Como es un tema recurrente y varios usuario lo preguntan, voy a describir de la manera mas sencilla que conozco, como programar la ejecución de un script en nuestra nas.

El script será un archivo que lo debemos de guardar dentro de la carpeta "share" para que se mantenga tras los reinicios de la nas. Yo recomiendo dejarlo en una carpeta compartida.
Este script puede ser para lanzar alguna tarea en bash , un correo electrónico, la ejecución de un programa, una tarea de sincronización,...

1- Instalación y uso de la consola de comandos

Todo ha de hacerse por consola de comandos o putty. Hay un paquete qpkg descargable del foro Qnap de Francia pero yo no le he probado aún. Si he probado Gotty y se que había antes un qpkg llamado "shell in a Box" que ya no lo encuentro en web.

Tomad nota de que el contenido de la web es efímero y si algo os interesa, lo descargáis y lo guardáis, que es posible que a futuro desaparezca.
Esto podéis aplicarlo al contenido multimedia de los canales de pago, hoy lo tenéis y mañana NO   Wink

Para poder acceder, también debéis tener activo el servicio de SSH. Para activarlo tenéis que ir al panel de control de QTS, servicios de red y de archivos. y después ir a "Telnet/SSH".
   
El puerto por defecto es el 22, pero podéis cambiar a otro. Es importante que este puerto no esté accesible desde internet.

Una vez instalado Putty, abrimos el programa, escribimos la ip privada de nuestra nas , el puerto de ssh y conectamos.
   

Al hacerlo nos pedirá credenciales. Aquí siempre usaremos el usuario admin  . Angry A ver si alguna vez Qnap cambia esto de ser admin
   
Al escribir la contraseña no vemos los caracteres.
Una vez dentro estamos en la línea de comandos.
   

Vamos a la carpeta "share" que cuelga de la raíz mediante el comando
Code:
cd /share

Una vez posicionados en ese directorio recomiendo crear una carpeta para futuros scripts ubicado en nuestro volumen y recomiendo hacerla como carpeta compartida para que QTS la cree por nosotros en la estructura de directorios.

  1. 2-si NO has creado la carpeta compartida "scripts" 
Seguimos estos pasos para hacerla manualmente y si no salta al punto 3-Usamos un editor para crear nuestro script

Éste dependiendo del raid o la estructura de discos puede terne diferentes nombres (MDx_DATA, CACHEDEVx_DATA,...).
Para saber el nombre podemos hacer uso del comando "ls -lha" que nos muestra archivos y rutas de los enlaces simbólicos de nuestras carpetas compartidas.
Al hacerlo nos saldrán en pantalla un listado del contenido de "share". 
De las carpeta compartidas, no saldrá a la derecha tras su nombre y los caracteres "--->"  la ruta relativa donde está.
   

Por ejemplo la carpeta compartida "Scripts" está en "MD0_DATA/Scripts/". 
De aquí sólo nos interesa MD0_DATA que es donde vamos a crear la carpeta para los scripts y creamos un archivo llamado "pruebas.sh"
Code:
cd MD0_DATA
mkdir Scripts
cd Scripts
vi pruebas.sh

3 -Usamos un editor para crear nuestro script

Ahora estamos en el editor arcaico y arisco editor vi (no recuerdo si viene otro editor llamado nano, pero podéis probar escribiendo "nano pruebas.sh" en vez de "vi pruebas.sh")
Escribimos el siguiente contenido en la primera línea

Code:
#! /bin/bash

y en la segunda y sucesivas las ordenes en bash. 

En mi caso este script comprueba si el SAI conectado a la nas está funcionando con baterías o no.
Code:
ups=$(upsc qnapups@localhost | grep ups.status:)
estado=${ups:12:2}
echo "$ups  $estado"
if [ "$estado" = "OL" ]; then
    echo "EL SAI está suministrando energía desde nuestra red eléctrica"
else
    echo "El SAI está suministrando energía desde sus baterías"
fi

   
Ahora para grabar el archivo hay que pulsar las siguiente teclas " ESC ", "w", "q" y "!" y  pulsar intro
En la parte inferior izquierda se verá así.
   
Ya está creado, ahora hay que darle atributo de ejecución con el comando chmod
Code:
chmod +x pruebas.sh
Ahora ya tenemos un script que puede ser ejecutado en  "/share/MD0_DATA/scripts/pruebas.sh"
Si no queréis un script tan complejo podéis poner uno sencillo que escriba algo en la consola con el siguiente contenido
Code:
#! /bin/bash
echo "Hola mundo"


4-Probamos el script
Podéis probar el script si ejecutamos el comando con la siguiente ruta absoluta
Code:
/share/MD0_DATA/scripts/pruebas.sh
Y saldrá algo similar a la siguiente captura
   

5-Insertamos y activamos el script como tarea programada

Antes de hacerlo y si echais una ojeada a la programación de cron veréis que podemos definir un fecha y hora exactas de ejecución, una periodicidad de minutos, horas, días, días de la semana.... es decir podemos complicarlo lo que queramos.

Por ejemplo vamos a ejecutarlo cada 15 minutos
*/15 * * * * /share/MD0_DATA/Scripts/pruebas.sh

Si queremos ejecutarlo los martes y jueves a las 12:00
00 12 * * 2,4 /share/MD0_DATA/Scripts/pruebas.sh

.--------------- minuto (0-59)
|  .------------ hora (0-23)
|  |  .--------- día del mes (1-31)
|  |  |  .------ mes (1-12) o jan,feb,mar,apr,may,jun,jul... (meses en inglés)
|  |  |  |  .--- día de la semana (0-6) (domingo=0 ó 7) o sun,mon,tue,wed,thu,fri,sat (días en inglés)
|  |  |  |  |
*  *  *  *  *  comando a ejecutar

Una vez hayamos decidido la programación podemos agregarla usando en comando

Code:
vi /etc/config/crontab
Nos abre de nuevo al editor vi y todas las líneas que hay programadas.
No os asustéis si hay muchas, pero es importante que no alteréis ninguna de las existentes. Si lo hacéis por error, para salir sin hacer cambios pulsar tecla ESC, tecla dos puntos :, tecla q , tecla ! e  Intro. Con esto se sale sin guardar.

En nuestro caso añadiremos al final del todo nuestra programación.
Para ello nos movemos con los cursores hacia abajo y con el de la derecha hasta situarnos en el último carácter.
Pulsaremos una vez la tecla de INS (insertar), volvemos a pulsar el cursor hacia la derecha y pulsamos intro para añadir la nueva línea
Code:
*/15 * * * * /share/MD0_DATA/Scripts/pruebas.sh
Ahora salimos y guardamos los cambios con la secuencia de teclas :
ESC, w, q, ! e Intro

Ya lo hemos modificado, ahora hemos de activarlo.
Desde consola escribimos las siguientes ordenes
Code:
crontab  /etc/config/crontab
/etc/init.d/crond.sh restart

Desde ese momento ya tenemos la línea en la programación, si queremos comprobarlos podemos escribir en consola
Code:
crontab -l
Nos listará en contenido de las programaciones en pantalla y veremos que en la última línea está la nuestra.


También podemos editar el archivo de crontab desde un entorno mas amigable con WinSCP editando el archivo /etc/config/crontab que al ser un enlace simbólico, realmente está en /mnt/HDA_ROOT/.config/crontab. Pero no nos libramos de la consola para aplicar los cambios.

Creo haberlo explicado para que aquellos que no tienen conocimientos de consola, puedan defenderse y aplicar scripts (todo lo complicados o sencillos que queramos).

Como siempre si veis alguna errata o gazapo comentármelo por privado y lo corrijo.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#2
Muy útil, seguro que a más de uno nos servirá  Smile

(01-05-2020, 11:42 AM)Ganekogorta Wrote:
Ahora para grabar el archivo hay que pulsar las siguiente teclas " ESC ", "w", "q" y "!" y  pulsar intro
En la parte inferior izquierda se verá así.

¿ Qué haríamos sin nuestro querido VI ?

Por cierto, me has recordado el chiste de un profe que tuve en la facultad:
- ¿ Sabes cómo generar contraseñas verdaderamente robustas ?
- No, ¿ Cómo ?
- La cadena de caracteres generada por un Programador intentando salir de VI  Big Grin
TS-253A 2x4TB RAID1 8GB RAM
“La inteligencia es la habilidad de evitar hacer trabajo y conseguir que el trabajo se haga.” (Linus Torvalds)
  Reply
#3
Ya te digo, para los nuevos usuarios es algo espartano y críptico.

Pero algo de lógica tiene, ya que la "w" viene de write y la "q" de quit.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#4
Sí, muchas cosas son acrónimos, pero otros.. ya es cuestión de práctica y memorizar. Y muy potente (como el tema de los buffers).

Para salir guardando siempre me ha parecido más práctico ":x", o incluso "ZZ", pero lo más habitual y nemotécnico es efectivamente ":wq!".
TS-253A 2x4TB RAID1 8GB RAM
“La inteligencia es la habilidad de evitar hacer trabajo y conseguir que el trabajo se haga.” (Linus Torvalds)
  Reply
#5
Hola buenas tardes. Tengo un problema que no se como solucionar. Creo el script y creo la tarea cron pero al reiniciar la NAS se me borra la tarea de crontab. ¿como puedo solucionarlo?
  Reply
#6
(14-03-2023, 07:53 PM)surgeon Wrote: Hola buenas tardes. Tengo un problema que no se como solucionar. Creo el script y creo la tarea cron pero al reiniciar la NAS se me borra la tarea de crontab. ¿como puedo solucionarlo?

Tienes que hacerlo persistente. Echa un ojo a este hilo.
https://www.qnapclub.es/showthread.php?tid=3485
TS-253A 2x4TB RAID1 8GB RAM
“La inteligencia es la habilidad de evitar hacer trabajo y conseguir que el trabajo se haga.” (Linus Torvalds)
  Reply
#7
Perdón pero no entiendo la solución.
Ese hilo habla de poner un script para que se ejecute al reinicio del nas usando autorun.sh pero el problema, que yo también tengo, es que doy de alta la tarea en crontab pero no se ejecuta y cuando vuelvo a comprobar crontab, la tarea ya no figura.
Por si ayuda, acabo de descubrir que el crontab que edito con crontab -e no es el mismo que figura en /etc/config/crontab. ¿Por qué no son el mismo?
Tengo un TS-453Be con QTS 5.0.1.2346
Gracias por la ayuda.
  Reply
#8
He resuelto el tema de la persistencia consultando la wiki de qnap para la edición de crontab aquí: https://wiki.qnap.com/wiki/Add_items_to_crontab
En esencia el problema está en que si utilizas crontab -e para editarlo, al reiniciar el nas tu crontab se sobreescribe y pierdes los cambios que hubieras echo. Hay que modificar a mano el que está en /etc/config/crontab.
Muchas gracias a todos.
  Reply




Users browsing this thread: 1 Guest(s)