我想配置一个应用程序以将日志写入/ dev / stdout,以便它们最终出现在Heroku的logplex中。但是我试图写到/ dev / stdout的权限被拒绝。

我不是在寻找解决方法。我可以煮得足够多。我真的很想知道为什么Heroku拒绝打开和写入/ dev / stdout的信息,如果有人对此有所了解。谢谢!

最佳答案

权限被拒绝错误的原因是/dev/stdout符号链接(symbolic link)悬挂而不是终止于/dev/pts中分配的伪tty:

~ $ ls -l /dev/stdout /proc/self/fd/1 /dev/pts/0
lrwxrwxrwx 1 root root 15 2014-03-29 17:21 /dev/stdout -> /proc/self/fd/1
lrwx------ 1 u59417 59417 64 2014-03-29 17:25 /proc/self/fd/1 -> /dev/pts/0
ls: cannot access /dev/pts/0: No such file or directory

由于悬挂的符号链接(symbolic link)终止于用户没有写许可权的目录(/dev/pts),因此OS拒绝创建不存在的/dev/pts/0
关于为什么/dev/pts/0不存在:Heroku的虚拟化基于LXC(请参阅https://devcenter.heroku.com/articles/dynos#technologies)。这并不排除伪tty的分配,但是在这种情况下,伪tty可能是在主机OS中分配的,并且来宾容器不会在/dev/pts中继承它(无论是有意还是无意,这都是一个相关的问题)。

10-07 19:09
查看更多