我想配置一个应用程序来将日志写入/ dev / stdout,以便它们最终出现在Heroku的logplex中。但是我得到Permission Denied试图写入/ dev / stdout。
我不是在寻找解决方法。我可以做很多的东西。我真的只想知道为什么Heroku否认开放并写入/ dev / stdout,如果有人对此有所了解的话。谢谢!
答案 0 :(得分:3)
Permission Denied错误的原因是/dev/stdout
符号链接悬空而不是终止于/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
由于悬空符号链接终止于用户没有写入权限的目录(/dev/pts
),操作系统拒绝创建不存在的/dev/pts/0
关于/dev/pts/0
不存在的原因:Heroku的虚拟化基于LXC(参见https://devcenter.heroku.com/articles/dynos#technologies)。这并不排除伪tty分配,但在这种情况下,伪tty可能在主机OS中分配,并且guest容器不在/dev/pts
中继承(无论是有意还是无意,这将是一个相关的问题)。
答案 1 :(得分:0)
Heroku正在运行Ubuntu。默认情况下,Ubuntu阻止访问/ dev / stdout等(apparmor)。 Heroku鼓励您直接使用应用程序流写入STDOUT / STDERR,而不是手动写入/ dev中的STDOUT流。
更新:这是不正确的 - @Aron Griffis把它直接放在上面 - 谢谢!