Script trabalhando manualmente, mas não no cron - não calculando var? [duplicado]

1
    

Esta pergunta já tem uma resposta aqui:

    

Estou fazendo um script de backup GFFS para uma tarefa da escola, mas encontrei alguns problemas com ele. Funciona assim:

/etc/backup/backup.sh PERIOD NUMBER 

Eu adicionei as seguintes linhas no cron:

# m h  dom mon dow   command
# Backup for fileserver:
#daily: 5 times/week
0   23   *   *    1-5   /etc/backup/backup.sh daily $(date -d "-1 day" +%w)
#weekly: 5 times/month
10  23   *   *    7     /etc/backup/backup.sh weekly $((($(date +%-d)-1)/7+1))
#monthly: 12 times/year
20  23   1   *    *     /etc/backup/backup.sh monthly $(date -d "-1 day" +%m)
#yearly: each year
0   3    1   1    *     /etc/backup/backup.sh yearly $(date -d "-1 day" +%Y)

Os cálculos no final é saber qual backup anterior deve ser substituído. Isso funciona perfeito quando acionado manualmente, mas quando acionado pelo cron faz algo estranho. Eu estou falando sobre a entrada de backup semanal. o cálculo deve me dar o número da semana no mês atual. Eu fiz 'grep CRON / var / log / syslog' e encontrei esta linha:

Dec 19 14:33:01 BE-SV-04 CRON[5445]: (root) CMD (/etc/backup/backup.sh weekly $((($(date +)

Parece que o cron não está executando o cálculo corretamente. Qualquer ajuda?

    
por Poomse8 19.12.2016 / 14:50

2 respostas

1

Eu acho que você tem que escapar do "%" - sinais

então isso:

0   23   *   *    1-5   /etc/backup/backup.sh daily $(date -d "-1 day" +\%w)

... deve funcionar. Eu não sei o que tem que ser escapado, acho que + e%, por favor, tente. * quando eu fiz isso no cron eu usei a sintaxe backtick mais feia para a execução de comandos e tive que escapar deles também, como: *

0  1 * * * something >> bla\'date \+\%Y_\%m_\%d\'.log
    
por 19.12.2016 / 14:58
0

Não tenho certeza de qual shell o cronjob é executado, mas parece que não é possível analisar o cálculo; talvez seja necessário usar bc .

    
por 19.12.2016 / 14:57