Резервное копирование базы данных и WordPress cron
Я хочу запускать задание cron, которое резервирует мою базу данных mysql и мои файлы WordPress один раз в день с панели hostgator.
Я нашел образец сценария и отредактировал параметры с моей информацией, но, похоже, он не работает должным образом. У меня нет большого опыта работы с cron, поэтому я не уверен, какие у меня проблемы.
У меня есть.sh файл с именем, backups.sh, сохраненный в домашнем каталоге, и у меня есть папка с именем backups с базой данных подпапок и WordPress.
это файл.sh я заменил {мои данные} моими учетными данными и заполнил все для своей базы данных:
#!/bin/bash
# Script Function:
# This bash script backups up the db everyday dependent on
# when you set the cron job to run with a file name time stamp
# and tar.gz zips the file.
# The db will be saved in /backups/database/
# Db backups older than 5 days will be deleted.\
#[Changes Directory]
cd /home/{my info}/backups/
#[Old DB Deletion and Files Script]
find /home/{my info}/backups/database -name "*.tar.gz" -mtime +5 -exec rm -f {};
find /home/{my info}/backups/wordpress -name "*.tar.gz" -mtime +5 -exec rm -f {};
#[Stamps the file name with a date]
TIMESTAMP=`date +%m-%d-%y-%H%M`
#[DB Backup Scripts]
# DB Name
HOST=localhost
DBNAME=""
USER=""
PASSWORD=""
DUMP_PATH=/home/{my info}/backups/database/
BACK_PATH=/home/{my info}/backups/wordpress/
mysqldump --opt -c -e -Q -h$HOST -u$USER -p$PASSWORD $DBNAME > $DBNAME.sql
tar czpf $DUMP_PATH/$DBNAME.$TIMESTAMP.tar.gz $DBNAME.sql
rm -f $DBNAME.sql
#Backing up Wordpress files @ root
tar czf $BACK_PATH/wordpress.$TIMESTAMP.tar.gz /home/{my info}/public_html/mydomain
Вот что у меня есть для командной строки:
/bin/sh ~/backups.sh
я получаю электронное письмо после выполнения задания cron, которое уведомляет меня: "Нет такого файла или каталога", а также куча команд не найдена.
1 ответ
cron
не всегда одинаково PATH
переменная в качестве оболочки входа в систему, и поэтому не всегда может найти исполняемый файл для таких вещей, как mysqldump
или даже tar
,
Я рекомендую использовать полный путь к каждой команде, а именно: /usr/bin/mysqldump
вместо просто mysqldump
, Вы можете легко определить, что это за путь, используя which
команда.
$ which mysqldump
/usr/bin/mysqldump
Вы можете использовать ниже скрипт bash, который создает резервные копии сайта и базы данных WordPress. Полная информация здесь -> https://www.easyaslinux.com/tutorials/how-to-periodically-backup-your-website-and-mysql-database-to-local-server-as-well-as-s3-bucket-using-bash-script/
#!/bin/bash
###################################
backup_dir="give_directory_here"
webapp_path="website_patj"
database_name="testdb"
database_user="dbuser"
database_pwd="password"
database_host="db_host_name.net"
retention_days=10
##################################
date=`date +%d-%m-%y`
path="$backup_dir$date"
echo $date
mkdir -p $path > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "-Successfully created directory $path"
mysqldump -u $database_user -p$database_pwd -h $database_host $database_name > $path/db_backup.sql
if [ $? -eq 0 ]; then
echo "-Successfully created database dump"
tar -czvf $path/backup_with_db.tar.gz $webapp_path $path/db_backup.sql > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "-Successfully completed file + db backup process"
rm -rf $path/db_backup.sql
old_date=`date --date="$retention_days day ago" +%d-%m-%y`
old_path="$backup_dir$old_date"
ls $old_path > /dev/null 2>&1
if [ $? -eq 0 ]; then
rm -rf $old_path > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "-Sucessfully removed old backup on $old_date"
else
echo "-Failed old backup removal $old_path" && exit 1
fi
fi
else
echo "-Failed file +db backup process" && exit 1
fi
else
echo "-Failed creating database dump, backup process failed" && exit 1
fi
else
echo "-Failed creating directory $path, backup process failed" && exit 1
fi