Imagino que seja um problema simples, mas não tenho ninguém para verificar meu trabalho.
Aqui está meu script bash
#!/bin/bash
# establish date format and dump name
DATE=$(date +"%Y%m%d-%H%M")
DUMPFILE=$DATE.dump
# path to log dir and name of output log file
LOGDIR=/opt/mongodb/backups/logs
DBLOG=$DATE-dump.log
# backup the database and output to a dump file, redirect output to a log
docker exec -i mongodb sh -c "mongodump --archive" > \
$DUMPFILE 2> \
$LOGDIR/$DBLOG
# archive the dump file and the file uploads
ARCHIVENAME=$DATE.tgz
ARCHIVELOG=$DATE-archive.log
tar -czvf $ARCHIVENAME /opt/mongodb/$DUMPFILE /opt/mongodb/files &> \
$LOGDIR/$ARCHIVELOG
Onde estou preso, o script emite corretamente o log de despejo. No entanto, quando chega ao fim, recebo
./backup.sh: line 20: /opt/mongodb/backups/logs/20250328-0942-archive.log: No such file or directory
Tentei usar o caminho absoluto em vez do da var:
tar -czvf $ARCHIVENAME /opt/mongodb/$DUMPFILE /opt/mongodb/files &> \
/opt/mongodb/backups/logs/$ARCHIVENAME
Mas recebo o mesmo erro. Estou supondo que isso seja meu entendimento ruim de redirecionamentos, tar ou um erro de sintaxe. Qualquer ajuda seria apreciada.
EDIT: Um arquivo chamado "' '" é criado toda vez que executo o script. Se executado
cat ' '
Vejo que esse arquivo é o log, então ele redireciona a saída para um arquivo, mas não da maneira desejada.
Provavelmente você tem um ou vários caracteres de espaço no final da última linha que deveria ter um caractere de barra invertida no final.
Uma linha que é continuada na próxima linha por uma barra invertida não deve ter nada depois da barra invertida, nem mesmo um espaço.
Como você tem espaço após a barra invertida, o espaço é citado, então você está, na verdade, dizendo
A próxima linha depois disso tenta executar o arquivo de log não existente como um comando. É isso que gera a mensagem de erro “No such file or directory”.
Minha opinião sobre seu roteiro, com minhas preferências pessoais incorporadas e também levando em consideração o que Paul_Pedant diz nos comentários sobre citações e quebras de linha.
Imagino que você ou seu editor colocaram um espaço depois do
\
na linha, fazendo com que o redirecionamento fosse para\
(' '
) em vez do arquivo.