nohup 输出重定向到不同的文件

nohup 输出重定向到不同的文件

我用nohuplinux对于/下重要的长期运行进程来说bash,这nohup time my command with arguments && mv nohup.out my.log通常是一个习语。

问题是将和nohup都放入了,而我无法控制文件的名称。这意味着,如果我不小心在同一个目录中启动两个,它们的输出将会交错在中。stdoutstderrnohup.outnohupnohup.out

问题是:

  1. 我该如何处理这个问题? 总是nohup在单独的目录中运行 s 并编写一个首先检查的 shell 函数./nohup.out是我认为的两个糟糕的选择。

  2. 我怎么不知道nohup该把输出重定向到哪里呢?GNU 工具往往有有很多选择, 为什么不nohup

答案1

你可以重定向 stdout 和 stderr到一个文件。使用 Bash 4(或其他方式,例如 Zsh),非常简单:

nohup <some-command> &> output.log

我无法告诉您为什么没有单独的选项来nohup设置输出,但如果您的 shell 可以处理这个问题,那么您实际上就不需要选项了。

答案2

在用户定义的文件中附加输出>>您可以在 nohup 命令中使用。

nohup php your_command >> filename.out 2>&1 &

此命令将把所有输出附加到文件中而不删除旧数据。

答案3

nohup除了启动一个进程以使其忽略 SIGHUP 之外,还有更多方法;例如:(写为 shell 函数)

nohup() {
    setsid "$@"
}

nohup() {
    ("$@" &)
}

nohup() {
    "$@" & disown
}

setsid,甚至(setsid "$@" &),可能是最好的选择。)

所有这些都允许您使用 、 和 / 指定>自己2>&>重定向>&

相关内容