Cómo escribir un script bash recurrente

Cómo escribir un script bash recurrente

Creé un programa que requiere una secuencia de instrucciones de línea de comando para extraer nueva información y actualizar las bases de datos.

¿Hay alguna manera de automatizar este proceso para no tener que escribir todo esto en la terminal cada vez que me siento? Tal vez haga que los primeros 3 pasos se ejecuten cada hora y el paso 4 se ejecute a las 2 a. m., ya que puede tardar mucho en completarse.

Paso 1:En terminales:

...Documents/dota2/dotaapi2/ python match_scraper.py 

Paso 2:en la terminal

 psql dota2apidb
 update games set online=1 where online is null;

Paso 3:En terminales:

...Documents/dota2/gosugamers/gosugamers/spiders/ scrapy crawl dota

Etapa 4:En la terminal: (ejecutar una vez solo a las 2 a.m.)

...Documents/dota2/dotaapi2/ python gosu_merge.py

...Documents/dota2/dotaapi2/ python unticketed.py

Respuesta1

Una solución podría ser configurar cronjobs para bloquear/desbloquear el directorio del juego. Para hacerlo, siga los pasos a continuación.

  1. Asegúrate de que cron-daemon esté instalado

    sudo apt-get install cron
    
  2. Configurar el cronjob para que se ejecute como root

Comience a editar el cronjob emitiendo el siguiente comando:

sudo crontab -e

Agregue las siguientes líneas al editor:

00 */1 * * * ...Documents/dota2/dotaapi2/ python match_scraper.py
01 */1 * * * psql dota2apidb
02 */1 * * * update games set online=1 where online is null;
03 */1 * * * ...Documents/dota2/gosugamers/gosugamers/spiders/ scrapy crawl dota
04 02 * * * ...Documents/dota2/dotaapi2/ python gosu_merge.py
05 02 * * * ...Documents/dota2/dotaapi2/ python unticketed.py

(Solo para dejar en claro que debe usar comandos y rutas adecuadas, tal vez poner algo de eso en scripts bash preparados para poder reducir la cantidad de crons en ejecución)

Respuesta2

ponga los pasos 1,2,3 en script1.sh ponga el paso 4 en script2.sh

Luego configuracronpara que el usuario adecuado ejecute los scripts según su programación:

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command

    01 * * * * /usr/bin/directory/script1.sh
    30 2 * * * /usr/bin/directory/script2.sh

script1.sh se ejecutará en el minuto 01 si cada hora de cada día, mientras que script2.sh se ejecutará en el minuto 30 de la hora 0200 todos los días.

información relacionada