Я запускаю этот скрипт bash, чтобы сделать резервную копию базы данных, но всегда получаю сообщение об ошибке в команде date и tar.

#!/bin/bash
backup_filename=/var/www/vhosts/foo.com/private/backup_foo_db.sql
filename="db_daily_"`date +%Y%m%d`".tar.gz"
compressed_filename=/var/www/vhosts/foo.com/private/backup_foo_db_$filename.tar.gz
mysqldump --add-drop-table -h localhost -ufoo -pbar foobar > $backup_filename
tar cvfz $compressed_filename $backup_filename
rm $backup_filename

./mysqlbackup.sh: line 3: date: command not found

Может ли это быть проблема с разрешением? Я не запускаю этот файл как root.

2 ответа2

0

Упростите и разбейте эту строку на несколько строк:

filename="db_daily_"`date +%Y%m%d`".tar.gz"

Так это становится примерно так:

myDate=`date +"%Y%m%d"`
filename="db_daily_"$myDate".tar.gz"
0

Вы выполняете это как работу cron или что-то подобное? Если это так, то, скорее всего, проблема в том, что он работает с переменной PATH, отличной от обычной, и не включает каталоги, в которых находятся date и tar . Есть два простых способа исправить это: либо использовать полные пути для команд (например, /usr/bin/date , как предложил @glenn jackman), либо явно установить PATH в верхней части скрипта (например, PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin или что-то подобное).

Кстати, вы также получите странное резервное имя файла. Во- первых, установить filename что - то вроде «db_daily_20110926.tar.gz», затем установить compressed_filename на что - то вроде «/var/www/vhosts/foo.com/private/backup_foo_db_db_daily_20110926.tar.gz.tar.gz». Это, вероятно, не то, что вы хотели.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .