我有一个crontab来执行每天的DB备份。DB是docker组合的一部分,所以我在cron脚本中运行这个命令:
cd /home/ubuntu/my_project/
&& /usr/bin/docker compose exec -T db pg_dump -U postgres > $BACKUP_FILE
这个命令在使用unknown shorthand flag : 'T' in -T
时失败,尽管它在我的终端上运行得很好。
我已经指定了路径到docker的其他SO答案已经建议,但我不明白为什么docker是抱怨从cron执行。此外,我在互联网上找到的所有其他资源都使用docker-compose
而不是docker compose
,所以我也没有从那里得到帮助。
我还确认了来自cron的PATH变量与我的正常终端相同。
* * * * * echo $PATH > tmp.txt 2&>1
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
虽然我不能理解这个问题的根本原因,但我的问题的最快解决方案是
- 安装
docker-compose
和 - 用
docker-compose
替换docker compose
命令
在此之后,我能够运行脚本从cron没有任何其他更改。
我怀疑这是由于docker compose
是一个较新的功能,正如Zac指出的那样,但我还没有对此做任何进一步的调查。