Avalie expressão matemática no cron

1

Eu quero nomear o arquivo de acordo com a paridade de um dia da semana. No terminal, os seguintes trabalhos: $(($(date +\%u)%2))

Mas isso não funciona no cron (eu suspeito que a avaliação de expressões matemáticas não funcione).

Como posso fazer isso funcionar no cron?

    
por Andrew Fount 09.07.2017 / 16:13

3 respostas

6

Você escapou de um sinal de porcentagem e não do outro:

$(($(date +\%u)%2))
               ^
              HERE

Todos os sinais de porcentagem em uma entrada crontab precisam ser ignorados, porque% tem um significado especial lá. Para citar o crontab (5) manpage:

The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file. Percent-signs (%) in the command,unless escaped with backslash (), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

É certo que esse parágrafo poderia ser melhor redigido.

Então, isso precisa ser:

$(($(date +\%u)\%2))
    
por 09.07.2017 / 17:38
3

Em crontab(5)

Several environment variables are set up automatically by the cron(8) daemon. SHELL is set to /bin/sh,

e sh não sabem nada sobre eles. Isto sugere duas soluções possíveis; primeiro, para definir SHELL para algum outro shell, como SHELL=/bin/bash ou, em vez disso, manter o arquivo cron simples e chamar um script que contenha a lógica de negócios matemática de data necessária. ( % também é especial de acordo com crontab(5) , a propósito)

    
por 09.07.2017 / 16:24
1

Crie duas entradas cron.

Um que é executado em dias com paridade zero (use o campo 'dia da semana' no crontab) que grava no arquivo nomeado com zero. E outro que é executado em dias com uma paridade, que grava no arquivo nomeado com um.

    
por 09.07.2017 / 17:26

Tags