通过'heroku run'运行的命令缺少日志

w41d8nur  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(107)

当我使用heroku run来运行命令时,stdout和stderr似乎只能转到我运行命令的终端,而不能通过heroku logs或logdrain查看它们。
有没有办法让heroku run的输出像来自调度程序的日志一样被处理?

再现步骤

在一个终端中,运行:

$ heroku logs --tail --app my-app

在另一个终端中:

$ heroku run python -c "print\(\'hi\'\)" --app my-app Running python -c print\(\'hi\'\)

我的期望:

单词“hi”应该通过logdrain和heroku logs -t在papertrail中可见

实际发生的情况:

输出到终端,而不是在logdrain或其他终端结束。我在日志中得到的只是关于进程启动和退出的元数据。实际的stdout和stderr内容丢失了。

icomxhvb

icomxhvb1#

此行为记录如下:
一次性的dynos连接到你的终端上运行,STDINSTDOUT通过一个字符接一个字符的TCP连接。这允许你像控制台一样使用交互式进程。由于STDOUT连接到你的终端,应用日志中记录的唯一事情就是dyno的启动和关闭。
如果你想从一个一次性的dyno中输出要被捕获到你的日志中,你可以使用heroku run:detached,例如。

heroku run:detached python -c "print\(\'hi\'\)" --app my-app

当然,这并不适合任何交互式的东西,但是我不确定记录交互式会话是否有意义。

相关问题