我有一系列命令,我想使用nohup。
每个命令可能需要一两天,有时我会从终端断开连接。
实现这一目标的正确方法是什么?
方法一:
nohup command1 && command2 && command3 ...
或 方法2:
nohup command1 && nohup command2 && nohup command3 ...
或 方法3:
echo -e "command1\ncommand2\n..." > commands_to_run
nohup sh commands_to_run
我可以看到方法3可能有效,但它迫使我创建一个临时文件。如果我只能从方法1或方法2中选择,那么正确的方法是什么?
答案 0 :(得分:2)
nohup command1 && command2 && command3 ...
nohup
仅适用于command1
。完成后(假设它没有失败),command2
将在没有nohup
的情况下执行,并且容易受到挂断信号的影响。
nohup command1 && nohup command2 && nohup command3 ...
我不认为这会奏效。这三个命令中的每一个都将受nohup
保护,但处理&&
运算符的shell不会。如果您在command2
开始之前注销,我认为它不会启动;同样适用于command3
。
echo -e "command1\ncommand2\n..." > commands_to_run
nohup sh commands_to_run
我认为这应该有效 - 但是另一种方法不需要创建脚本:
nohup sh -c 'command1 && command2 && command3'
然后保护shell免受挂断信号的影响,我相信这三个子命令也是如此。如果我在最后一点上弄错了,你可以这样做:
nohup sh -c 'nohup command1 && nohup command2 && nohup command3'