当我使用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内容丢失了。
1条答案
按热度按时间icomxhvb1#
此行为记录如下:
一次性的dynos连接到你的终端上运行,
STDIN
和STDOUT
通过一个字符接一个字符的TCP连接。这允许你像控制台一样使用交互式进程。由于STDOUT
连接到你的终端,应用日志中记录的唯一事情就是dyno的启动和关闭。如果你想从一个一次性的dyno中输出要被捕获到你的日志中,你可以使用
heroku run:detached
,例如。当然,这并不适合任何交互式的东西,但是我不确定记录交互式会话是否有意义。