【发布时间】:2022-02-04 04:20:16
【问题描述】:
我真的看不出这里有什么问题。我有一个 Digital Ocean droplet,它每 10 分钟运行一次 bash 脚本,以从我的 Heroku slug 数据库中获取一些记录。这是我的脚本:
# /bin/sh
echo "Starting pull from postgres ..."
heroku pg:psql dbname --app app --command "COPY (select wallet from wallets where tokens_sent > 0) TO STDOUT WITH CSV" > wallets.csv
它获取所有钱包并将它们保存在wallets.csv 文件中。如果我在终端中使用sh get_tokens.sh 运行此脚本,一切正常!出于某种未知原因,当我将此脚本放入 crontab 时,它不会从 Heroku 中提取数据。
我是 root 用户,并且 root 用户正在运行脚本。以下是文件权限:
4 -rwxr-xr-x 1 root root 782 Feb 3 18:18 get_tokens.sh
16 -rw-r--r-- 1 root root 12318 Feb 3 18:21 wallets.csv
这是我的 crontab 记录:
10 * * * * bash ~/get_tokens.sh >> logs.txt
我添加了 logs.txt 以查看是否可能会弹出一些错误,但似乎没有任何问题。
有什么想法吗?提前致谢
【问题讨论】:
-
标准 cron 作业故障排除:使用
>> logs.txt 2>&1捕获错误以及常规输出。此外,cron 作业在非常小的环境下运行;你的脚本(和heroku本身)有什么环境依赖?如果你使用env -i bash ~/get_tokens.sh运行它是否有效(这与 cron 作业的环境不同,但比正常情况更接近)? -
非常感谢@GordonDavisson。谢谢你,我找到了我遇到问题的真正原因。我得到了
heroku not found。由于某种原因,脚本无法读取snap/bin/文件夹以找到heroku bin。我添加了完整的路径,问题就消失了 -
这是 cron 作业中非常常见的问题。在 cron 作业的环境中最少的事情之一是
PATH(即查找命令二进制文件的位置列表)——它通常只是 /bin 和 /usr/bin,所以除非这些之外的任何东西都不会被发现您设置PATH或使用二进制文件的显式路径。
标签: bash heroku cron heroku-cli