Programación de tareas

cron

Los scripts que han de dar mensajes al usuario si son ejecutados en shell interactivo (que también se pueden ejecutar como no interactivo):

# Comprovamos si ha activado la opcion de ejecutar a través de cron
for i in "$@" ; do
  if [[ $i == "--cron" ]] ; then
    # Establecemos como salida de todos los pipes al logger
    exec &> >(logger -t "$0")
    break
  fi
done

Los echo que subsigan han de ser normales, hacia:

# STDOUT (no incluir $0)
echo "Generación del archivo correcta"

# STDERR (no incluir $0)
echo "Error en la generación del archivo" >&2

Para llamar al script:

# Desde el shell
$HOME/scripts_linux/prova.sh

# Desde el cron
echo "$HOME/scripts_linux/prova.sh --cron" | batch &>/dev/null

Parámetros

while getopts s:f:d: flag
do
    case "${flag}" in
        s) RANGO_RANDOM=${OPTARG};;
        f) FICHERO_KEY=${OPTARG};;
        d) DIRECTORIO_BASE=${OPTARG};;
    esac
done

[ -z "$RANGO_RANDOM" ] && echo "Falta parámetro aleatorio" && exit 2
[ -z "$FICHERO_KEY" ] && echo "Falta el nombre del fichero" && exit 2
[ -z "$DIRECTORIO_BASE" ] && echo "Falta el directorio de partida" && exit 2

# echo "Rango retraso: $RANGO_RANDOM";
# echo "Fichero clave: $FICHERO_KEY";
# echo "Directorio: $DIRECTORIO_BASE";
 

batch

Permite retrasar la ejecución de un comando hasta que la carga del sistema baja más allá de un parámetro fijado.

Info:
* http://www.thegeekstuff.com/2010/06/at-atq-atrm-batch-command-examples/

Por ejemplo se está usando en la actualización de la galería de fotos, en el crontab del usuario hugo.

echo "$HOME/scripts_linux/actualitza_galeria/actualitza_galeria.sh" | batch &>/dev/null

Para las tareas periódicas, el batch ha de incluirse al nivel más bajo en el que dé igual el orden de ejecución.

Resumen de comandos

Listar trabajos en cola
atq

Consultar trabajo
at -c [numero de job]

Eliminar un trabajo en cola
atrm [numero job]

Eliminar todas las tareas de la cola
for i in `atq | awk '{print $1}'`;do atrm $i;done