Cronie

De OpenSPA Wiki
Saltar a: navegación, buscar


Los distros OE-A GIT 4,1 >, tienen desde hace unos meses un cron diferente al usado hasta esa fecha, las diferencias que tienen respecto a su antecesor es la incorporación de cronie, donde se agregan funciones de comandos a los ya conocidos y explicados aquí:

Crond Manager

En el post del Manual Crond Manager aludimos a la interfaz del usuario donde con comandos predefinidos y no predefinidos creados de forma manual se consiguen que se ejecuten scripts y lineas de comandos que queramos que funcionen en segundo plano en nuestro receptor, ahora también desde que tenemos cronie podemos crear por FTP en el sistema de ficheros otro tipo de ejecuciones que si bien son parecidas, merece la pena que las conozcáis para así poderlas usar, algunas diferencias:

1.- El inicio del demonio cron no lo inicia en sistema ya el busybox-cron, ahora lo hace crond.

2.- Ahora tenemos el archivo llamado crontab nativo en otras distribuciones linux y donde escribiendo nuestros cron jobs llaman a nuestros scripts pudiéndolos ejecutar en tiempo definido.

Si miramos ahora por FTP nos encontramos dicho archivo alojado dentro de /etc/crontab si lo editamos vemos algo tal que así:

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don\'t have to run the `crontab\'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user  command
17 *   *   *   * root run-parts /etc/cron.hourly
42 *   *   *   * root  test -x /usr/sbin/anacron || ( cd / && run-parts /etc/cron.hourly )
47 6   *   *   7 root  test -x /usr/sbin/anacron || ( cd / && run-parts /etc/cron.weekly )
52 6   1   *   * root  test -x /usr/sbin/anacron || ( cd / && run-parts /etc/cron.monthly )
#
Pequeña descripción de dichas líneas del crontab

La definición de las variables SHELL y PATH sirven para indicar al demonio qué intérprete de comandos debe utilizar y cuál será su PATH.

Luego las lineas de comandos completas son nuestros cron jobs.

Fijaos en el comando run-parts esto lo que hace es ejecutar vuestro script dentro de un directorio.

Estos directorios son ahora creados para poder colocar dentro de ellos nuestros scripts y donde usando el comando citado podemos ejecutarlos en según que orden de tiempo queramos hacerlo, estas carpetas están alojadas también dentro de /etc/ y se ven así:

  • cron.d (en este directorio podemos meter también nuestro archivo crontab, osea meter dicho archivo aquí y se ejecutaría nuestros cron jobs de la misma forma que lo pueda hacer donde lo tenéis por defecto /etc/crontab).
  • cron.daily (script dentro se ejecutaría cada día).
  • cron.hourly (script dentro se ejecutaría cada hora).
  • cron.monthly (script dentro se ejecutaría cada mes).
  • cron.weekly (script dentro se ejecutaría cada semana).

Ejemplo de uso:

Cogemos y metemos dentro de la carpeta cron.hourly un script y le damos permisos de ejecución chmod 755 el script shell se llama por ejemplo standby.sh

Ahora lo más importante, a dicho script le quitamos la extensión .sh lo dejo sin extensión renombrándolo así: standby

Ahora editamos nuestro archivo crontab (recordad donde esta en /etc/crontab) cogemos y esta línea la vamos a editar (nuestro cron job) , yo por ejemplo quiero que se me ejecute en el minuto 5 de cada hora pues la linea de dicho archivo crontab quedaria así:

05 *   *   *   * root run-parts /etc/cron.hourly
Tenemos otra forma también de ejecutar dicho script en el minuto 00 de cada hora y es sustituyendo los operadores 05 * * * * por esta cadena de texto @hourly quedando asi:

@hourly root run-parts /etc/cron.hourly
El script se os va a ejecutar en segundo plano como digo cada hora del día en el minuto cero.

Podemos hacer esto en todas las carpetas creadas por cronie y arriba mencionadas según el tiempo en que queramos que se ejecute.

Aquí ejemplos de ejecuciones en tiempo determinado por el usuario:

  • cron.hourly >@hourly Ejecutar a cada hora, equivale a estos operadores"0 * * * *"
  • cron.daily > @daily Ejecutar una vez al día, equivale a estos operadores"0 0 * * *"
  • cron.weekly>@weekly Ejecutar una vez a la semana, equivale a estos operadores "0 0 * * 0"
  • cron.monthly>@monthly Ejecutar una vez al mes, equivale a estos operadores "0 0 1 * *"
  • cron.d ->@reboot Ejecutar script o secuencia de linea de comandos al iniciar el sistema.
Las lineas arriba citadas y según el orden en que están quedarían así en nuestro crontab:

@hourly root run-parts /etc/cron.hourly
@daily root run-parts /etc/cron.daily
@weekly root run-parts /etc/cron.weekly
@monthly root run-parts /etc/cron.monthly
@reboot  root /media/hdd/scripts/borracrash.sh
A estas órdenes leídas por el crontab, voy hacer una mención aparte para el operador @reboot

con este operador podemos ejecutar un comando o script justo cuando inicia el sistema.

Muchas veces necesitamos ejecutar algo justo antes de que se inicie todo el sistema y la GUI y no sabemos como poder hacerlo, con esta orden lo vais a conseguir.

Por ejemplo una orden de llevar el receptor a standby no os va a funcionar, por una sencilla razón, como la orden se os va a ejecutar demasiado pronto no podrá mandar el sistema a modo de espera justo cuando está iniciando, cualquier otra orden de comandos si os va a funcionar.

En mi caso por ejemplo yo mi lista de IPTV de servidor de pago, la actualizo por secuencias de comando wget y las estoy cambiando justo antes de iniciar todo el sistema de esta forma que hablo, como es tan temprano el inicio de dicho comando no necesito reiniciar GUI para actualizar dicha lista, de ahí que la he incluido en el comando @reboot ya podéis entonces echarle imaginación que podéis hacer.

Deciros que ustedes mismos os podéis crear un archivo...llamarlo como queráis por ejemplo "MisScriptsInicio" y lo metéis dentro de carpeta cron.d, este archivo puede hacer la misma función que el archivo crontab (o bien hacer esto en el que ya tenéis nativo, el crontab de /etc/crontab).

Entonces meteríais el contenido de vuestras secuencias de comandos o llamadas a scripts y ya trabajaría.

Un ejemplo de mi archivo MisScriptsInicio:

Recordad que el contenido SHELL o PATH debe estar presente por si os creáis un crontab personalizado, la otra parte de dicho archivo sería mi ejemplo ejecución de un script de borrado de crashlog justo cuando inicia el sistema, lo único es llamarlo según en la ruta que esté.

Recordad que podéis llamar un script o incluso poner la linea de comandos directamente en el archivo se os va a ejecutar igual.

Con esto estaría funcionando:

SHELL=/bin/sh<br /><br />
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin<br />@reboot  root /media/hdd/scripts/borracrash.sh
Una vez tengamos nuestro cron job editado y guardado en nuestro crontab si no queremos reiniciar el sistema podemos por consola terminal ejecutar esta orden y ya quedaría asignado nuestros cambios:

/etc/init.d/crond restart

Así a groso modo, éstas son las diferencias añadidas en cronie. Recordad que es un añadido a lo que ya hace nuestro cron antiguo y en el Manual Crond Manager está perfectamente explicado.Cronie es más completo y parecido a lo que hace el demonio en otras distribuciones linux.