LINUX.ORG.RU
решено ФорумAdmin

Скрипт по крону не выгружает БД из контейнера

 ,


0

1
#!/bin/sh

cd /home/<user>
docker exec -it websrv-db-1 mariadb-dump -uroot --password=<password> db > db.sql

cd /home/<user>/docker/websrv/usr/share/nginx/html
tar -cf files.tar --exclude=*.tar *

mv files.tar /home/<user>
cd /home/<user>

DATA=`date +"%Y-%m-%d_%H-%M-%S"`
tar -czf $DATA-website.tar.gz db.sql files.tar

rm db.sql files.tar

crontab -l (от пользователя)

39 5 * * * bash /home/<user>/backup.sh

Если скрипт отрабатывает по крону, то БД выгружается без данных (размер 0)

-rw-r--r-- user/user          0 2025-06-08 05:39 db.sql
-rw-r--r-- user/user	1402880 2025-06-08 05:39 files.tar

Еже-ли скрипт запустить ручками, то с базулей в архиве всё ок

-rw-r--r-- user/user	  63503 2025-06-08 06:28 db.sql
-rw-r--r-- user/user	1402880 2025-06-08 06:28 files.tar

WTF…?!?


Разумеется файл пустой

Каждый новичок натыкается на одно и то же. В cron НЕТ никаких переменных окружения. В т.ч. PATH. Поэтому либо ты явно объявляешь PATH в скрипте или в crontab’е, либо используешь ПОЛНЫЕ пути

router ★★★★★
()
Ответ на: комментарий от ALiEN175

Видимо, у ТС та версия crond, которая какой-то PATH определяет, но куций, типа PATH=/usr/bin:/bin.

И вобще, ТС, похоже, умничает. У него в выводе нет файла ″$DATA-website.tar.gz″, а в конце скрипта ″rm db.sql″...

mky ★★★★★
()
Ответ на: комментарий от mky

У него в выводе нет файла ″$DATA-website.tar.gz″, а в конце скрипта ″rm db.sql″…

Чиво…?!?

Ты между строк читаешь?

Dodik
() автор топика
Последнее исправление: Dodik (всего исправлений: 1)
Ответ на: комментарий от router

либо ты явно объявляешь PATH в скрипте или в crontab’е, либо используешь ПОЛНЫЕ пути

which docker показал /usr/bin/docker изменил строчку в скрипте с

docker exec -it websrv-db-1 mariadb-dump -uroot --password=<password> db > db.sql

на

/usr/bin/docker exec -it websrv-db-1 mariadb-dump -uroot --password=<password> db > db.sql

но результата во-первых нет. БД выгружается с размером 0, а во-вторых, если без полного пути скрипт не выбрасывает ошибку, то зачем полный путь писать? Он же исполняемый файл видит и отрабатывает

Dodik
() автор топика
Ответ на: комментарий от Dodik

без полного пути скрипт не выбрасывает ошибку

В кроне вы никаких ошибок не увидите. Он напишет примерно следующее (дословно не помню) No MTA installed, discarding output. Да, я очень сомневаюсь, что вы там настроили почту.

Так что перенаправляйте stderr в файл и смотрите, что там кому не нравится.

ALiEN175
()