【问题标题】:How can I redirect nohup output to a specified file?如何将 nohup 输出重定向到指定文件?
【发布时间】:2018-03-24 16:41:07
【问题描述】:

我从我在 SO 上找到的其他示例中尝试的所有方法似乎都不起作用。我正在尝试使用 nohup 运行我的应用程序,但将应用程序的输出附加到文件中。

我已经尝试了以下一些方法。这些似乎都不起作用。

nohup dotnet application.dll &> out.log &
nohup dotnet application.dll > out.log 2>&1 &
nohup dotnet application.dll > /opt/out.log &

我总是收到类似的东西

-bash: out.log: Permission denied

我已尝试使用 sudo 运行该应用程序,但它似乎仍然无法正常工作。


nohup dotnet application.dll &

工作正常,但它会将输出定向到其他目录,例如 /home/ubuntu/nohup.out

我做错了什么?

【问题讨论】:

  • nohup dotnet application.dll > out.log 2>&1 & 应该可以工作。
  • 显然您没有对该文件的写入权限。先解决这个问题,然后再担心nohup 和&。
  • @hacks 这相当于 OP 的前两次尝试。
  • @melpomene;这就是我所说的。那应该可以。
  • 所有示例都应该可以工作,尽管最后一个会省略 stderr...

标签: linux bash nohup


【解决方案1】:

nohup dotnet application.dll > out.log 2>&1 & 是正确的形式。

> out.log 将 STDOUT 重定向到文件 out.log。

2>&1 将 fd2 (STDERR) 重定向到 fd1 (STDOUT),后者已经重定向到文件 out.log。

您的问题在于文件权限(或只读文件系统)。在您的命令前添加sudo 无法解决此问题,因为sudo 仅以root 身份执行nohup dotnet application.dll,输出重定向由bash 以您的普通用户权限完成。您可以通过调用具有 root 权限的单独 shell 来解决此问题:

sudo sh -c 'nohup dotnet application.dll > out.log 2>&1 &'

【讨论】:

  • 从man bash复制粘贴:重定向标准输出和标准错误有两种格式:&>word和>&word。在这两种形式中,首选第一种。这在语义上等同于>word 2>&1
  • 谢谢,原来是我的文件权限。我假设一切都将作为 sudo 运行,而不仅仅是它的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-26
  • 2017-04-04
相关资源
最近更新 更多