Назад | Перейти на главную страницу

Странные ошибки в сценарии BASH

Я пытаюсь исправить эту ошибку, которую постоянно вижу, и не понимаю, почему я их вижу. Сценарий генерирует список файлов старше 7 дней, затем архивирует / gzip их в каталог резервных копий. Наконец, он удаляет файлы после успешного завершения резервного копирования. У меня странная ошибка. Сценарий прост, по большей части он предназначен для предотвращения двойного запуска или зависания сценария или для ведения журнала. Важный код находится между звездочками.

#!/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

Когда я запускаю скрипт, в сгенерированном журнале появляется следующее:

./fwdCleanup.sh: line 67: backups: command not found

Я понятия не имею, почему это проявляется - я не могу понять этого. Код по-прежнему выполняется блестяще, но ошибка сводит меня с ума. Я не вижу ничего в строке 67, что даже удаленно сообщило бы ОС, что резервное копирование - это команда.

Любой совет будет очень признателен.

Изменить: до того, как кто-либо заметит: это делается на тестовой виртуальной машине, поэтому используется учетная запись root :)

Ваша строка 67 ************************* который действительно должен иметь # в начале. Первый * расширяется вашей оболочкой и берет файл с именем backups в текущем каталоге.

Использовать -x возможность bash, чтобы узнать, что делает скрипт. Это даст вам довольно хорошее представление о том, где дела идут плохо.