--- title: 【CodiMD】docker-compose 備份 date: 2019-06-14 is_modified: false disqus: cynthiahackmd categories: - "資訊科技 › 開發與輔助工具" - "資訊科技 › 系統備援" tags: - "HackMD/CodiMD/HedgeDoc" - "Docker" - "Docker-Compose" - "Linux/Unix" - "協同合作工具" - "工具安裝與部署" --- {%hackmd @CynthiaChuang/Github-Page-Theme %} <br> 這是 [安裝完 CodiMD](/@CynthiaChuang/How-to-Setup-CodiMD) 後在執行定期備份時踩到的坑...在使用 [crontab + script 定期備份](/@CynthiaChuang/Backup-CodiMD-When-Using-Docker-Compose)時,我百思不得其解,為啥我跑出來的 **backup.sql** 會是空的? 更讓我不解的是,我手動執行 script 的結果卻是正常的!??? <!--more--> <br> CodiMD 官方給定指令是長這樣,在手動執行它運作的非常好 ```shell $ docker-compose exec database pg_dump hackmd -U hackmd > backup.sql ``` <br><br> 但偏偏 crontab + docker-compose 這兩個加在一起就是跑不起來 Orz。 一開始懷疑過是不是權限問題,使用 crontab 執行時沒有 docker-compose 的執行權限或是寫出的權限。基本上後者可以排除,因為我直接輸出在 home 目錄下,不至於沒有寫出的權限。 所以就先考慮是不是 docker-compose 的執行權限出問題,直接加 sudo ,但還是輸出的 backup.sql 還是空: ```shell $ sudo docker-compose exec database pg_dump hackmd -U hackmd > backup.sql ``` <br><br> 查了一下相關[討論](https://github.com/docker/compose/issues/2293),大家是建議最好使用絕對路徑,因此將 docker-compose 換成 **/usr/local/bin/docker-compose**,但還沒用 :cry: ```shell /usr/local/bin/docker-compose exec database pg_dump hackmd -U hackmd > backup.sql ``` <br><br> 執行時多加了兩行,確認一下執行身分與路徑有沒有跑掉,但看起來也一切正常。 ```shell whoami > log.txt whereis >> log.txt ``` <br><br> 後來D大跟我說他試出來了,在指令上加 **-T** 就正常了: ```shell /usr/local/bin/docker-compose exec -T database pg_dump hackmd -U hackmd > backup.sql ``` <br>查了一下 -T 是禁用 TTY,**docker-compose exec** 是預設有啟用 TTY,而 crontab 是沒有預設 TTY(終端設備),所以將 docker-compose exec 加上 -T 就可以。 不過我還是不太明白,即便預設有啟用 TTY,但 Script 在執行過程並有任何輸出到終端機上,我以為這樣應該不會卡死才對 @@? ## 參考資料 1. [Crontab can't execute docker-compose commands|Issue #2293 · docker/compose](https://github.com/docker/compose/issues/2293) 2. [docker-compose with crontab|Stack Overflow](https://stackoverflow.com/questions/30905697/docker-compose-with-crontab) 3. [【操作系统】Crontab运行相关问题以及解决方法|【 无线技术运营 】 (本专栏是http://wireless.qzone.qq.com的镜像) - CSDN博客](https://blog.csdn.net/wireless_tech/article/details/6417996) <br><br> > **本文作者**: 辛西亞.Cynthia > **本文連結**: [辛西亞的技能樹](https://cynthiachuang.github.io/Backup-CodiMD-When-Using-Docker-Compose) / [hackmd 版本](https://hackmd.io/@CynthiaChuang/Backup-CodiMD-When-Using-Docker-Compose) > **版權聲明**: 部落格中所有文章,均採用 [姓名標示-非商業性-相同方式分享 4.0 國際](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en) (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up