Como escrever um script bash recorrente

Como escrever um script bash recorrente

Criei um programa que requer uma sequência de instruções de linha de comando para extrair novas informações e atualizar os bancos de dados.

Existe uma maneira de automatizar esse processo para que eu não precise digitar tudo isso no terminal toda vez que me sento? Talvez faça com que as três primeiras etapas sejam executadas a cada hora e a etapa 4 seja executada às 2h, pois pode levar muito tempo para ser concluída.

Passo 1:No terminal:

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

Passo 2:No terminal

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

Etapa 3:No terminal:

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

Passo 4:No terminal: (executar uma vez apenas às 2h)

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

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

Responder1

Uma solução poderia ser configurar cronjobs para bloquear/desbloquear o diretório do jogo. Para fazer isso, siga as etapas abaixo.

  1. Certifique-se de que o cron-daemon esteja instalado

    sudo apt-get install cron
    
  2. Configurando o cronjob para ser executado como root

Comece a editar o cronjob emitindo o seguinte comando:

sudo crontab -e

Adicione as seguintes linhas ao 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

(Só para deixar claro que você precisa usar comandos e caminhos adequados, talvez colocando um pouco disso em scripts bash preparados para reduzir a quantidade de crons em execução)

Responder2

coloque as etapas 1,2,3 em script1.sh coloque a etapa 4 em script2.sh

Então configurecronpara o usuário apropriado executar os scripts de acordo com sua programação:

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 será executado no minuto 01 se a cada hora de cada dia, enquanto script2.sh será executado no minuto 30 da hora 0200 todos os dias.

informação relacionada