【问题标题】:Heroku Bash Script not working on Crontab [duplicate]Heroku Bash 脚本不适用于 Crontab [重复]
【发布时间】: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


【解决方案1】:

您没有提供wallets.csv 的绝对路径:

# /bin/sh
echo "Starting pull from postgres ..."
heroku pg:psql dbname --command "COPY... TO STDOUT WITH CSV" > wallets.csv

该文件与当前工作目录相关,这可能不是您期望的目录。我建议你提供一个完整的路径:

# /bin/sh
echo "Starting pull from postgres ..."
heroku pg:psql dbname --command "COPY... TO STDOUT WITH CSV" > /path/to/wallets.csv

或者你可以cd进入正确的目录:

# /bin/sh
echo "Starting pull from postgres ..."
cd /path/to/some/directory
heroku pg:psql dbname --command "COPY... TO STDOUT WITH CSV" > wallets.csv

在 Unix 和 Linux 上查看 What is the 'working directory' when cron executes a job?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 2013-11-17
    • 2014-08-06
    • 2019-12-09
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多