【问题标题】:Running bash file on Heroku在 Heroku 上运行 bash 文件
【发布时间】:2022-01-05 22:01:22
【问题描述】:

我正在尝试使用 Heroku 上的 bash 文件启动我的 Discord 机器人,因此机器人会在出现错误时自动重启。

我在 Heroku 上的工作人员是:chmod a+x run.sh

run.sh 文件:

#!/bin/sh
function main(){
node .
echo "The bot is crashed, restarting now..."
main
}
main

编辑:我将工作人员更改为 bash run.sh 并将 run.sh 文件限制为:

#!/bin/bash
node index.js
echo "The bot is online."

现在我收到了回复:Error: Cannot find module '/app/index.js

【问题讨论】:

    标签: bash shell heroku


    【解决方案1】:

    您不需要(也不应该)使用 Heroku 编写自己的启动脚本。这就是Procfile 的用途。应该这样做:

    worker: node index.js
    

    这定义了将运行node index.jsworker 进程类型。然后,只要你有一个 worker dyno 运行,你的脚本就应该运行。

    【讨论】:

    • 我知道这一点,但我想使用一个 bash 文件,如果出现错误,它会自动重新启动机器人,以确保它始终运行,即使发生小错误。
    • Heroku automatically restarts crashed dynos, too。如果您的 dynos 经常崩溃以至于这还不够(例如,冷却期会影响您正在运行的应用程序),您需要解决崩溃问题。一直重启并不是正确的解决方案。
    【解决方案2】:

    尝试将您的标题更改为/bin/bashfunction 不是 POSIX。如果您不使用其他 bash 功能,也可以省略 function

    我还注意到您正在从 main 调用 main ,这会导致重复调用。即使这是有意的,使用循环仍然会更好。 Bash 不支持尾调用优化。

    【讨论】:

    • 我仍然在日志中收到此错误:进程以状态 0 退出
    • 这听起来很成功。如果您对 node 或 heroku 本身有疑问,请尝试在 SuperUser 或 Server Fault 中询问特定于它的不同问题。 StackOverflow 仅用于脚本。
    • 脚本在我看来,除了它的行以 CRLF 结尾的可能性。
    猜你喜欢
    • 2016-06-21
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2018-01-28
    • 2016-03-23
    • 2013-08-27
    • 2012-04-06
    相关资源
    最近更新 更多