Um comando que executará um comando diferente em dias ímpares [duplicado]

1

Eu preciso pensar em um comando que eu vou executar um comando diferente em dias irregulares.

    
por TheHypedPotato 16.01.2018 / 11:14

2 respostas

11

Como usuário normal, execute crontab -e para editar seu crontab. Nesse crontab digite:

00 12 1-31/2 * * /path/to/the/command_for_odd_days
00 12 2-30/2 * * /path/to/the/command_for_even_days

Para esses comandos serem executados às 12:00 (meio dia) todos os dias.

Se você é administrador na máquina, pode criar um:

/etc/cron.d/myservice

arquivo, com um conteúdo semelhante, exceto que você precisa especificar qual usuário os comandos devem executar como.

00 12 1-31/2 * * someuser /path/to/the/command_for_odd_days
00 12 2-30/2 * * someuser /path/to/the/command_for_even_days

Execute man 5 crontab para saber mais sobre o formato desses crontabs.

A sintaxe 1-31 / 2 (para dias entre 1 e 31, a cada dois dias) deve ser reconhecida pela maioria das implementações cron modernas, incluindo todas as disponíveis no seu sistema Ubuntu. Se você se deparar com um sistema antigo em que ele não é suportado, você poderá substituí-lo por 1,3,5,7,...,29,31 .

    
por 16.01.2018 / 11:28
9

O especificador de formato %e do utilitário date fornecerá o dia do mês como um número inteiro entre 1 e 31 (com um espaço inicial para os dias 1 a 9, mas isso é inofensivo quando usado dentro de expansões aritméticas) :

day=$( date +%e )

Para testar se esse número é ímpar ou par:

if [ "$(( day % 2 ))" -eq 0 ]; then
    # $day is even
else
    # $day is odd
fi

Transformando-o em uma função de shell:

run_command () (
    day=$( date +%e )

    if [ "$(( day % 2 ))" -eq 0 ]; then
        # $day is even
        some_command_on_even_days
    else
        # $day is odd
        other_command_on_odd_days
    fi
)

Isso entraria em seu arquivo de inicialização do shell (por exemplo, $HOME/.bashrc para bash ), e você o chamaria com

run_command
    
por 16.01.2018 / 11:24

Tags