写了一个备份数据库的脚本,之前测试通过,最近在另一个服务器上照搬,结果定时执行总是不行,但手动执行没问题。今天花时间解决一下。

先从crontab入手:添加bash/sh xxx 2> /tmp/crontab_script_log.txt 2>&4 从日志中发现 which docker-compose 可以执行,但是  docker-compose verison报错: docker-compose-entrypoint.sh: exec: line 20: verison: not found

原来是之前使用二进制的docker-compose,而新服务器使用docker的方式安装的docker-compose(其实就是一个shell脚本运行一个docker-compose的容器)估计问题出在脚本中的脚本调用问题。切换为二进制安装,完美解决问题。以后不用容器方式按照docker-compose了。

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
#之前的方式 INSTALL AS A CONTAINER
sudo curl -L --fail https://github.com/docker/compose/releases/download/1.27.4/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
#备份到本机脚本
#!/bin/bash

FILENAME=siteName.$(date '+%Y%m%d%H%M%S').db.backup.sql

cd /var/www/html/siteName
docker-compose -f docker-compose.yml.staging exec -T db mysqldump -uroot -proot joomla  > /tmp/$FILENAME \
&& cd /tmp/ \
&& tar zcvf $FILENAME.tar.gz $FILENAME \
&& rm $FILENAME -rf