{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Comandos: CRON y CRONTAB\n", "\n", "¿Qué son?\n", "\n", "> \" En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora a la que deben hacerlo se especifican en el archivo crontab. El nombre cron proviene del griego chronos que significa \"tiempo\". Cron se puede definir como el equivalente a Tareas Programadas de Windows.\" Wikipedia: https://es.wikipedia.org/wiki/Cron_(Unix)\n", "\n", "Recursos explicativos de CRON:\n", "- https://blog.desdelinux.net/cron-crontab-explicados/\n", "- https://www.redeszone.net/tutoriales/servidores/cron-crontab-linux-programar-tareas/\n", "- https://docs.oracle.com/cd/E38897_01/html/E23086/sysrescron-1.html\n", " \n", "Alternativa en Windows:\n", "- https://active-directory-wp.com/docs/Usage/How_to_add_a_cron_job_on_Windows/Scheduled_tasks_and_cron_jobs_on_Windows/\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ventajas\n", "\n", "- Alto graodo de expresividad periodica\n", "- La periodicidad está gestionada por el SO. \n", " - El tiempo es relativo en cada equipo.\n", " - El SO se encarga de gestionar el proceso.\n", "- Podemos redigir la salida del programa (stdout) a un fichero.\n", "\n", "## Vamos a crear un proceso donde su lanzamiento esté gestionado por CRON\n", "\n", "Creamos un fichero ejecutable del SO. En este caso un SH: launcher.sh\n", "```\n", "#!/bin/sh\n", "python3 ~/myscript.py\n", "```\n", "\n", "Modificamos su permisos para que se ejecutable:\n", "```\n", "chmod 775 launcher.sh\n", "```\n", "\n", "Comprobamos su funcionamiento:\n", "```\n", "sh launcher.sh\n", ".\\launcher.sh\n", "```\n", "\n", "Incorporamos su ejecución periódica dentro de un fichero de crontab. Para ello, ejecutamos: \n", "```\n", "crontab -e\n", "```\n", "\n", "y tras solicitarnos el tipo de editor, incluimos una de las lineas siguientes:\n", "\n", "```\n", "@reboot sleep 60 && sh /home/user/launcher.sh >> /home/user/myfile.log\n", "\n", "* * * * * sh /home/user/launcher.sh >> /home/user/otro.log\n", "```\n", "\n", "\n", "URL útil:\n", "- https://crontab.guru/\n", "\n", "\n", "\n", "Podemos chequear si el servicio está funcionando:\n", "```\n", "sudo service cron status\n", "sudo service cron activate\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Actividad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Programa un script para que almacene el valor \"actual\" del precio del crudo. Vamos a suponer que en cada instante de tiempo pasa 1 minuto, y ese minuto supone un día más!!! Sí no hay valor ese día, se guarda un nan.\n", "\n", "```\n", "Date \n", "1986-01-02 25.56 >> Primera vez: tiempo 0\n", "1986-01-03 26.00 >> Despues de un minuto\n", " >> minuto 2 y minuto 3 no contiene valores: 1986-01-04 y 1986-01-05\n", "1986-01-06 26.53 >> minuto 4 \n", "...\n", "```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.7 64-bit ('my397')", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.9.7" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "8b38137d60f5ef6101ebd11fd805c6415d52a5c999d13278488bced8392256b3" } } }, "nbformat": 4, "nbformat_minor": 2 }