如何 nohup 从命令行生成的子进程?

问题描述 投票:0回答:2

我要解释一下我遇到的问题有点复杂:

  1. 我有一个长时间运行的 nohupped 进程,它将其 stderr 重定向到文件中。
  2. 但是,我使用子进程用时间戳标记 stderr。
  3. 不幸的是,上面提到的子进程没有被 nohupped(我的错)!
  4. 现在,我如何以某种方式让这个子进程 nohupped 并保留 stderr 并在我注销后继续访问该文件。我必须退出服务器。

有问题的命令行看起来像这样:

$ nohup myscript.sh -op1 val1 -op2 val2 -op3 val3 >mystderr.txt 2> >(while read line; do echo "$(date): ${line}"; done > n100l1800g0.5.err ) < /dev/null &

上述标记 stderr 的技术是最近在 stackoverflow 上学到的。

预先感谢您提供任何线索。

bash stderr
2个回答
1
投票

我的

nohup
的手册页说
 nohup [ options ] command [arg ...]

我记得在某个地方读过,

nohup
不处理管道,我认为这就是你所拥有的。

尝试将管道进程重新制作为接受参数的脚本,它应该可以工作。


-1
投票

将命令放入 shell 脚本中并 nohup 该脚本。

所以如果yourscript包含:

#!/bin/bash
myscript.sh -op1 val1 -op2 val2 -op3 val3 >mystderr.txt 2> >(while read line; do echo "$(date): ${line}"; done > n100l1800g0.5.err ) < /dev/null

然后从命令行

$ nohup 你的脚本&

© www.soinside.com 2019 - 2024. All rights reserved.