Я пытаюсь исправить эту ошибку, которую постоянно вижу, и не понимаю, почему я их вижу. Сценарий генерирует список файлов старше 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, чтобы узнать, что делает скрипт. Это даст вам довольно хорошее представление о том, где дела идут плохо.