Shell script Permission denied mysqldump: Получил ошибку 32 при записи только в Cron

У меня есть простой файл sh для резервного копирования некоторых баз данных MySql и их FTP на внешний сервер. Сценарий оболочки работает нормально, если вызывается из командной строки, но не работает, если он запланирован как задание cron.

Все файлы chmdod 777

Это сценарий

mysqldump -uuser-ppassword databasename | gzip > shop1.gz
mysqldump -uuser -password databasename | gzip > shop2.gz
mysqldump -uuser -ppassword databasename | gzip > timesheets.gz
mysqldump -uuser -ppassword databasename | gzip > library.gz 
tar -cvvf backup.tar *.gz

filename="backup.tar"
hostname="****"
username="****"
password="****"
ftp -un $hostname <<EOF
quote USER $username
quote PASS $password
passive
cd db_backups
binary
put $filename
quit
EOF

Получил ошибки:

httpdocs/dump/db_bck.sh: line 1: shop1.gz: Permission denied
mysqldump: Got errno 32 on write
httpdocs/dump/db_bck.sh: line 2: shop2.gz: Permission denied
mysqldump: Got errno 32 on write
httpdocs/dump/db_bck.sh: line 3: timesheets.gz: Permission denied
mysqldump: Got errno 32 on write
httpdocs/dump/db_bck.sh: line 4: library.gz: Permission denied
mysqldump: Got errno 32 on write
tar: backup.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
ftp: u: unknown option

ЭТО ЗАКЛЮЧИТЕЛЬНЫЙ РАБОЧИЙ СЦЕНАРИЙ, ТОЛЬКО В СЛУЧАЕ, БУДЕТ ПОЛЕЗНО КТО-ТО ЕЩЕ:

mysqldump -u -p mydb1 | gzip > httpdocs/dump/mydb1.gz
mysqldump -u -p mydb2 | gzip > httpdocs/dump/mydb2.gz
mysqldump -u -p mydb3 | gzip > httpdocs/dump/mydb3.gz
mysqldump -u -p mydb4 | gzip > httpdocs/dump/mydb4.gz 


cd /var/www/vhosts/mydomain.com/httpdocs/dump
filename="*.gz"
hostname="ftphostname"
username="ftpusernam"
password="ftppassword"
/usr/kerberos/bin/ftp -un $hostname <<EOF
quote USER $username
quote PASS $password
passive
cd db_backups
binary
prompt
mput $filename
quit
EOF

person Luca    schedule 26.05.2015    source источник
comment
Убедитесь, что у пользователя, от которого вы запускаете задание cron, есть доступ к mysql.   -  person Pardeep Dhingra    schedule 26.05.2015
comment
Спасибо за предложение. Пользователь тот же, что я использую из командной строки.   -  person Luca    schedule 26.05.2015
comment
unix.stackexchange.com / questions / 52769 /   -  person Pardeep Dhingra    schedule 26.05.2015


Ответы (2)


Убедитесь в следующем (предварительные проверки)

  1. Убедитесь, что у вас достаточно свободного места на диске.

  2. Увеличьте max_allowed_packet для mysqldump

  3. Разрешение пользователя, запускающего cron (проверьте все chown, chgrp, chmod)

  4. Убедитесь, что gzip действительно работает

  5. Убедитесь, что у вас есть права на запись для filename="backup.tar"

  6. Попробуйте использовать информацию о полном пути, например (/var/lib/mysql/backups/shop2.gz)

  7. Наконец, используйте touch, чтобы сначала создать файл, а затем запустить скрипт с помощью cron

person Koustuv Chatterjee    schedule 26.05.2015
comment
Хороший чек-лист. Я последую вашим предложениям, как только у меня будет время, и вернусь к вам. Спасибо ! - person Luca; 27.05.2015
comment
Это был вопрос пути. Спасибо за вашу помощь. - person Luca; 27.05.2015

У меня была такая же проблема, и я уже изменил файлы на 777. Решил ее, указав полный путь к файлу gzip.

person Aaron B Day    schedule 20.07.2016