Executando um cronjob com diferentes parâmetros a cada dia

12

Sou programador e não sei muito sobre crons, mas quero saber se isso é possível.

Digamos que eu tenha uma matriz [option1, option2, option3] e um script que eu executo no NodeJS chamado script.js . Eu quero executar este script todos os dias às 01:00. O comando cron disso seria:

0 1 * * * node ~/script.js

Bem, agora a parte complicada, eu quero rodar as opções a cada dia, por exemplo, segunda-feira eu quero correr node ~/script.js option1 , no dia seguinte node ~/script.js option2 e assim por diante. Além disso, quero poder adicionar / remover opções quando necessário, mas a rotação deve permanecer intacta.

Isso é possível de alguma forma? Eu sei que eu poderia fazer isso dentro do nó também, mas eu prefiro fazer isso de fora do script e deixar o script como está.

    
por Saif Bechan 28.08.2015 / 03:42

3 respostas

15

Also, I want to be able to add/remove options when needed, but the rotation should stay intact.

Isso é complicado. O que significa a rotação permanecer intacta após a modificação da lista de opções? Afinal, você poderia estar reconstruindo completamente a lista, destruindo qualquer pista sobre onde você estava.

O que você provavelmente poderia fazer é configurar um diretório com arquivos que representem suas opções (por meio do nome do arquivo ou do conteúdo deles). Então, sempre que a tarefa do cron for executada, você listaria esse diretório, classificando os arquivos pela hora da última modificação. Você pega a entrada mais antiga, touch desse arquivo para alterar sua hora de modificação para a hora atual e, em seguida, usa-a para executar o script.

#!/bin/bash
cd ~/script-options
next=$(ls -rt | head -n1)
touch -- "${next}"
node ~/script.js ${next} or $(<"${next}")

Se você quiser, você pode escrever isso em uma única linha para o cron, mas ficará mais difícil de ler.

Adicionar opções significa adicionar novos arquivos ao diretório de opções. Remover opções significa excluir arquivos. A qualquer momento, o arquivo mais antigo é o que será executado em seguida, portanto, novas opções serão adicionadas no final do ciclo, como se o tivesse acabado de ser executado. Se você quiser reordenar as opções, pode tocá-las na ordem que desejar.

    
por 28.08.2015 / 13:56
20

Digamos que você queira uma opção diferente para cada dia da semana. Você pode:

  1. Tenha uma tarefa cron separada para isso:

    0 1 * * 0 node ~/script.js option1
    0 1 * * 1 node ~/script.js option2
    0 1 * * 2 node ~/script.js option3
    

    etc ...

  2. Tenha bash fornecendo as opções desejadas para você:

    0 1 * * * node ~/script.js case 'date +%u' in 0 ) echo option1 ;; 1 ) echo option2 ;; 2 ) echo option3 ;;  esac
    

    (Eu não corri o último, então pode precisar de alguns ajustes - mas essa é a idéia geral.)

por 28.08.2015 / 05:29
13

Não, não consigo pensar em nenhuma maneira limpa de fazer isso. Basta escrever um script de invólucro shell simples que verifique a data e inicie seu aplicativo de nó com as opções necessárias todos os dias.

    
por 28.08.2015 / 03:53

Tags