|
|
|
A cron se le puede decir que ejecute tareas de varias maneras:
1. Por defecto, en el archivo /etc/crontab, está especificado que
se
ejecuten los scripts en /etc/cron.daily, /etc/cron.monthly et. a ciertas
fechas y hora. Esta es la manera más fácil de automatizar algo:
basta
con añadir un script a esos directorios, y se ejecutarán diariamente,
o
mensualmente etc.
Ejemplo de /etc/crontab modificado:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
# (min hora etc) (user) (comando)
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
# Insertar una linea asi para colocar scripts en /etc/cron.d
# Esta por ejemplo ejecutaria cada minuto los scripts de ese directorio
#* * * * * root run-parts /home/fvel/automaticos
# aquí podria ir otra linea cualquiera
Ver al final una explicación sobre run-parts.
2. Colocando archivos que sigan el formato crontab, es decir el formato
del caso 1, en el directorio /etc/cron.d.
Estos archivos pueden llamarse de cualquier manera, pero deben tener el
formato adecuado, es decir, líneas parecidas a las de arriba.
Ejemplo, archivo basura.txt
* * * * * fvel /home/fvel/bin/algunprograma
Si no se coloca el user no funciona. (se puede consultar /var/log/cron
y aparece una línea ORPHAN tal.)
Los archivos cron colocados en este directorio permiten colocar cosas
adicionales a las diarias, semanales etc del primer punto. Aunque esto
es relativo, porque las lineas de los archivos aca, se podrían añadir
a
las de /etc/crontab.
3. Invocando la orden crontab -e
Esto permite que cada usuario Linux cree sus propio crontab files.
Al dar esta órden aparece aparece el editor vi para editar o crear
un
archivo similar a los de arriba pero con la diferencia que no se
requiere colocar el usuario como sexto campo en cada línea, debido
a que
el archivo creado se graba automáticamente en /var/spool/cron con el
nombre del usuario que invoca al programa crontab.
En resumidas cuentas parece ser que la manera 1 es la mas sencilla y
satisface la mayoría de los casos, y para casos especiales utilizar
la
manera 3, inclusive como usuario root.
PARA EVITAR PROBLEMAS:
Consultar /var/log/cron
Revisar /etc/allow.cron y deny. Si no existen no hay problema.
Los scripts si tienen redireccion, deben tener rutas absolutas porque si
no se hacen relativas al usuario, asi echo "hola...">>hola.txt
crea el
archivo hola.txt pero en /root si root es el usuario.
Ojo que la salida de los comandos programados no sale por pantalla sino por
mail
si esta especificado MAILTO=fvel
PROBLEMAS:
Si al ejecutar un script sale "Exec format error" es porque falta
en la primera línea
#!/bin/sh
-------------------------------------------------------
El comando run-parts directorio
lo que hace es ejecutar todos los scripts que encuentre en ese
directorio, he aqui su codigo:
/usr/bin/run-parts
And here's what it looks like before it's all discected in the piece by
Jim Sack below. This is a good example of a shell script. Though the
topic of shell scripts is beyond the purposes of this book, it does help
illuminate how crontab is set up on a Red Hat Linux system, and give you
a quick view of a shell script. Este es el de mi redhat 9:
#!/bin/bash
# run-parts - concept taken from Debian
# keep going when something fails
set +e
# si el número de argumentos es menor que uno
if [ $# -lt 1 ]; then
echo "Usage: run-parts <dir>"
exit 1
fi
if [ ! -d $1 ]; then
echo "Not a directory: $1"
exit 1
fi
# Ignore *~ and *, scripts
for i in $1/*[^~,] ; do
[ -d $i ] && continue
# Don't run *.{rpmsave,rpmorig,rpmnew,swp} scripts
[ "${i%.rpmsave}" != "${i}" ] && continue
[ "${i%.rpmorig}" != "${i}" ] && continue
[ "${i%.rpmnew}" != "${i}" ] && continue
[ "${i%.swp}" != "${i}" ] && continue
[ "${i%,v}" != "${i}" ] && continue
# lo de awk imprimie el nombre del ejecutable. Ver awk.txt
if [ -x $i ]; then
$i 2>&1 | awk -v "progname=$i" \
'progname {
print progname ":\n"
progname="";
}
{ print; }'
fi
done
exit 0
Alguna documentacion:
RUN-PARTS
NAME SYNOPSIS DESCRIPTION COPYRIGHT
NAME
run-parts - run scripts or programs in a directory
SYNOPSIS
run-parts [--test] [--verbose] [--report] [--umask=umask] [--arg=argument]
[--help] [--version] directory
DESCRIPTION
run-parts runs a number of scripts or programs found in a single
directory directory. Filenames should consist entirely of upper and
lower case letters, digits, underscores, and hyphens. Subdirectories of
directory and files with other names will be silently ignored.
Scripts must follow the #!/bin/interpretername convention in order to be
executed. They will not automatically be executed by /bin/sh.
The files found will be run in the lexical sort order of the filenames.
OPTIONS
--test
print the names of the scripts which would be run, but don't actually run
them.
--verbose
print the name of each script to stderr before running.
--report
similiar to --verbose, but only prints the name of scripts which produce
output. The script's name is printed to whichever of stdout or stderr
the script first produces output on.
--umask=umask
Sets the umask to umask before running the scripts. umask should be
specified in octal. By default the umask is set to 022.
--arg=argument
Pass argument to the scripts. Use --arg once for each argument you want passed.
--
Specifies that this is the end of the options. Any filename after --
will be not be interpreted as an option even if it starts with a hyphen.
--help
Display usage information and exit.
--version
Display version and copyright and exit.
COPYRIGHT
Copyright (C) 1994 Ian Jackson. Copyright (C) 1996 Jeff Noxon. Copyright (C)
1996,1997,1998