【发布时间】:2021-11-09 19:38:22
【问题描述】:
一直在扯我的头发...对于设置背景 - 我有一个运行无纸化 ng 的 docker 容器,并且正在尝试自动备份。我正在运行 rsync,将一个文件夹镜像到我的备份驱动器上。
我在/home/user/paperless-backup.sh 有一个简短的 shell 脚本:
#!/bin/sh -i
# Paperless backup shell script
cd /home/user/paperless-ng
docker-compose exec -T webserver document_exporter ../export
echo 'The paperless backup shell script job has run. Runtime:' >> /home/user/cron-test.txt
date >> /home/user/cron-test.txt
我使用 crontab -e 在我的用户 cron 作业列表中包含以下行:
SHELL=/bin/bash
* * * * * /home/user/paperless-backup.sh
所以:
- 我知道 cron 选项卡运行良好,因为
cron-test.txt的输出可以很好地增加日期。 - 如果我使用
$ bash paperless-backup.sh将paperless-backup.sh作为bash 脚本运行,它会按预期执行,并且会备份新文件。
但是当作为 cron 作业运行时,它似乎只是跳过了以 docker-compose 开头的行...
任何帮助将不胜感激!
【问题讨论】:
-
我不认为在这种情况下会有所不同,但为什么
#!/bin/sh而不是#!/bin/bash? -
尝试将 stderr 重定向到一个文件,以便查看它是否出错。
-
谢谢!我确实将其更改为
#!/bin/bash以防万一……我在 cron 作业的末尾添加了一个>> /home/user/cron.txt 2>&1,输出告诉我/home/user/paperless-backup.sh: 5: docker-compose: not found -
你需要在脚本中设置
PATH以便它可以找到docker-compose,或者使用命令的完整路径。 -
天啊!现在太明显了。非常感谢您的帮助!!
标签: linux bash docker shell cron