logfile 2>&1 &-6ren">
gpt4 book ai didi

java - 在Java中执行linux终端命令,涉及写入日志文件,但没有权限?

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:35 25 4
gpt4 key购买 nike

这是代码:

String cmd = "/usr/local/postgresql/bin/postgres -D /usr/local/postgresql/data >logfile 2>&1 &";
Process p = Runtime.getRuntime().exec(cmd);

这不起作用。该命令应该启动 postgres 服务器,但我检查服务器没有启动,这意味着该命令没有执行。但如果命令如下所示,它就可以工作: /usr/local/postgresql/bin/postgres -D/usr/local/postgresql/data 它只启动服务器,但不需要写入日志文件。

所以我猜命令中的字符可能有问题。我尝试了这个solution 。但它仍然不起作用。然后我意识到也许这是权限问题?我的意思是java文件没有写入日志文件的权限?但我不知道如何解决这个问题。有什么建议吗?提前致谢。

最佳答案

在 C# 中,我们能够获取控制台和错误流的句柄,然后对它们进行我们喜欢的操作。

您能否从 p 获取输出流的句柄,然后以编程方式写入日志文件,而不是“> logfile ...”?

末尾的“&”也是如此。您的 Process API 可能有一种将其置于后台的方法。

要排除权限,请将上面示例中的“logfile”更改为“/tmp/mytemporarylogfile.txt”之类的内容,看看是否有帮助。 (我对此表示怀疑,因为我认为它不喜欢 Java 内部的 ">"、"2>&1"和 "&"等 shell 结构。想象一下,如果您在 Windows 上运行它,会发生什么。)

关于java - 在Java中执行linux终端命令,涉及写入日志文件,但没有权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com