linux - 为什么我的 shell 脚本('docker exec')中的特定行无法作为 cron 作业运行?
问题描述
一直在撕扯我的头发......对于设置背景 - 我有一个运行无纸化-ng的docker容器,并且正在尝试自动化备份。我正在运行 rsync,将一个文件夹镜像到我的备份驱动器上。
我有一个简短的 shell 脚本/home/user/paperless-backup.sh
:
#!/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
我使用以下行在我的用户 cron 作业列表中包含crontab -e
:
SHELL=/bin/bash
* * * * * /home/user/paperless-backup.sh
所以:
- 我知道 cron 选项卡运行良好,因为输出
cron-test.txt
增加了日期就好了。 - 如果我
paperless-backup.sh
像使用$ bash paperless-backup.sh
它的 bash 脚本一样运行,它会按预期执行,并备份新文件。
但是当作为 cron 作业运行时,它似乎只是跳过了开始的那一行docker-compose
……</p>
任何帮助将不胜感激!
解决方案
As helpfully pointed out by @Barmar and @Ted Lyngmo, the cron
environment didn't have the same PATH
variables as my user, so just needed it explicitly setting out.
Added a line using export PATH="$PATH:/path/to/container
and seems all good now.
推荐阅读
- python - Python zipline 订单从未因假符号完成
- git - 为什么我们需要 git add?在 git 提交之前
- python - 将 numpy 2D 与 1D 数组相乘
- python - Python api请求失败并报ssl错误
- android - 如何在 Kotlin 中将变量从一个函数传递到另一个函数
- docker-compose - 为什么 Traefik 中间件不适用于 RabbitMQ/Portainer
- python - 为什么在这种情况下python中的for循环不起作用
- ruby - ruby 正则表达式删除最后一次出现
- java - Android Recycler 视图不能返回超过 8 个项目
- node.js - Postgresql 锁