我用nohup
linux
对于/下重要的长期运行进程来说bash
,这nohup time my command with arguments && mv nohup.out my.log
通常是一个习语。
问题是将和nohup
都放入了,而我无法控制文件的名称。这意味着,如果我不小心在同一个目录中启动两个,它们的输出将会交错在中。stdout
stderr
nohup.out
nohup
nohup.out
问题是:
我该如何处理这个问题? 总是
nohup
在单独的目录中运行 s 并编写一个首先检查的 shell 函数./nohup.out
是我认为的两个糟糕的选择。我怎么不知道
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>
的&>
重定向>&
。