AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 783517
Accepted
Kusalananda
Kusalananda
Asked: 2024-09-15 21:01:30 +0800 CST2024-09-15 21:01:30 +0800 CST 2024-09-15 21:01:30 +0800 CST

O cronograma do crontab no Alpine Linux é executado em dias em que não deveria ser executado

  • 772

Tenho uma programação no meu crontab pessoal em um sistema Alpine Linux 3.20 que roda às 00:10 de terça a domingo (ou seja, todos os dias da semana, exceto segundas-feiras):

10 0 * * 2-7  "$HOME/local/sbin/backup.sh" prune-daily

Isso parece disparar nas segundas-feiras também. Por quê?


Note que meu relatório inicial deu os sintomas como "Não roda aos domingos". Eu me lembrei errado do que aconteceu, desculpe. Corrigi a descrição dos sintomas após investigá-los mais a fundo. O cronograma do crontab está correto, como estava desde o início.

cron
  • 1 1 respostas
  • 1205 Views

1 respostas

  • Voted
  1. Best Answer
    Kusalananda
    2024-09-15T21:01:30+08:002024-09-15T21:01:30+08:00

    O familiar daemon Vixie Cron usa os inteiros de 0 a 7 para designar os dias da semana, de domingo a domingo (tanto 0 quanto 7 são domingo). Um cronograma com 2-7o campo dia da semana seria executado, portanto, nas terças, quartas, ... e domingos. Usar 7 para designar domingos é uma extensão do padrão POSIX paracrontab .

    Se habilitado, o daemon Cron padrão no Alpine Linux não é o daemon Vixie Cron, mas uma implementação mínima incorporada ao BusyBox.

    O daemon BusyBox Cron não usa o inteiro 7 para domingos e permite apenas sete inteiros para designar o dia da semana, de 0 a 6, com 0 usado para domingos, como é evidente em seu código-fonte .

    Concluindo, o cronograma do crontab precisa ser modificado para continuar sendo executado em todos os dias da semana, exceto segundas-feiras:

    10 0 * * 0,2-6  "$HOME/local/sbin/backup.sh" prune-daily
    

    Ou, alternativamente,

    10 0 * * Tue-Sun  "$HOME/local/sbin/backup.sh" prune-daily
    

    O motivo pelo qual o agendamento é acionado todos os dias quando um intervalo de dias da semana terminando em 7 é usado é devido a um loop no código que tenta determinar em quais dias da semana um trabalho com uma especificação de intervalo deve ser adicionado:

    /*
     * fill array, using a failsafe is the easiest way to prevent
     * an endless loop
     */
    {
        int s0 = 1;
        int failsafe = 1024;
    
        --n1;
        do {
            n1 = (n1 + 1) % modvalue;
    
            if (--s0 == 0) {
                ary[n1 % modvalue] = 1;
                s0 = skip;
            }
            if (--failsafe == 0) {
                goto err;
            }
        } while (n1 != n2);
    }
    

    O loop é executado do início do intervalo até o fim, mas incrementa usando n1 = (n1 + 1) % modvalue(onde n1é o número do dia da semana e modvalueé 7, para sete dias). Como isso não pode chegar a 7 (vai até um máximo de 6 e então volta para 0), ele dispara um "failsafe", que encerra o loop após 1024 iterações. Até então, o trabalho foi adicionado a todos os dias da semana (os elementos de 0 a 6 na arymatriz foram definidos como 1).

    Como o código manipula valores de um único dia, como 2(terça-feira) e 3,4(dois dias, quarta-feira e quinta-feira) como intervalos de valores únicos ( 2-2e 3-3,4-4respectivamente), um único dígito 7no campo do dia da semana também causaria o mesmo problema.

    • 23

relate perguntas

  • Como o anacron funciona se não é um daemon?

  • Tarefas do cron não funcionando como esperado

  • Cron */6 horas mas com offset?

  • Como recuperar crontab excluído

  • Auto-SSH funciona manualmente, mas não em segundo plano

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve