Sua linha 67 é *************************
, o que deve ter realmente um #
no começo. O primeiro *
está sendo expandido pelo seu shell e está pegando o arquivo chamado backups
no diretório atual.
Estou tentando corrigir esse erro e continuo vendo, e não sei por que estou vendo. O script gera uma lista de arquivos com mais de 7 dias e, depois, tars / gzips em um diretório de backup. Por fim, ele remove os arquivos depois que o backup é concluído com êxito. Eu estou encontrando um erro estranho. O script é simples, a maioria é para evitar que o script seja executado duas vezes ou seja interrompido ou manipula o log. O código importante está entre os asteriscos.
#!/bin/bash
#
#
# Title: fwdCleanup.sh
# Author: Matthew Sarro
# Date: 03/07/2012
# Desc: Backs up all files down the tree which are
# older than 7 days
#
#
#
#
DATE='date +%F-%H%M'
LOGFILE=/root/testing/fwdcleanuplogs/$DATE.log
exec 3<>$LOGFILE
exec >&3 2>&3
#define the name of the lockfile
LOCKFILE='/root/testing/fwdcleanup.pid'
# check for existing lockfile
if [ -e "$LOCKFILE" ]; then
# lockfile exists
#check if file is readable
if [ ! -r "$LOCKFILE" ]; then
echo error: lockfile is not readable
exit 1
fi
#define PID as the process number in lockfile
PID='cat "$LOCKFILE"'
# check if process is signal-able and redirect stderr to /dev/null
kill -0 "$PID" 2>/dev/null
#if process was signal-able echo an error
if [ $? == 0 ]; then
echo error: existing instance of this task is already running
exit 1
fi
# process that created lockfile is no longer running - delete lockfile
rm -f "$LOCKFILE"
#check if lockfile deleted properly
if [ $? != 0 ]; then
echo error: failed to delete lockfile
exit 1
fi
fi
# create lockfile containing current process ID
echo $$ >"$LOCKFILE"
if [ $? != 0 ]; then
echo error: failed to create lockfile
exit 1
fi
#************************
#EDIT IN HERE
#find all files older than 7 days and create a file list
find /root/testing/{MSP,CEMP} -mtime +7 -type f > /root/testing/fwdcleanuplogs/$DATE.list
#add all files from the file list into a tar.gz file
tar -czf /root/testing/backups/$DATE.tar.gz --files-from /root/testing/fwdcleanuplogs/$DATE.list
#delete all files from the file list off disk
rm -f 'cat /root/testing/fwdcleanuplogs/$DATE.list'
*************************
# delete lockfile
rm -f "$LOCKFILE"
if [ $? != 0 ]; then
echo error: failed to delete lockfile
exit 1
fi
exec 3>&-
exit 0
Quando executo o script, o seguinte aparece no log gerado:
./fwdCleanup.sh: line 67: backups: command not found
Eu não tenho ideia do porque isso está aparecendo - não consigo entender. O código ainda é executado de forma brilhante, mas o erro está me deixando louco. Eu não consigo ver nada na linha 67 que até mesmo diga remotamente ao SO que os backups são um comando.
Qualquer conselho seria realmente apreciado.
Editar: Antes que alguém perceba: isso está sendo feito em uma VM de teste, daí o uso da conta root:)
Use a opção -x
para bash para obter um rastreamento do que o script está fazendo. Isso lhe dará uma boa ideia de onde as coisas estão indo mal.