【问题标题】:Why does a specific line in my shell script ('docker exec') fail to run as a cron job?为什么我的 shell 脚本('docker exec')中的特定行无法作为 cron 作业运行?
【发布时间】: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.shpaperless-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


【解决方案1】:

正如@Barmar 和@Ted Lyngmo 有用地指出的那样,cron 环境与我的用户没有相同的PATH 变量,因此只需要明确设置即可。

使用export PATH="$PATH:/path/to/container 添加了一行,现在看起来一切正常。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多