我想进行延迟的后台执行,对于延迟,我sleep [anyseconds] && [execution]
使用后台执行nohup
单独的简单示例nohup
:
nohup date &>> out.log &
当然,您可以date
在中找到执行结果的打印输出out.log
。
但我想延迟执行,比如15秒,所以需要进行一些组合:
nohup sleep 15 && date &>> out.log &
这次它不能正常工作,sleep 15
而 并不总是date
能执行 - 如果你关闭终端, 之后它将不会执行任何操作&&
。
有什么问题nohup
? 它屈服于&&
??
答案1
我假设你在 bash 中,其中nohup
有一个系统命令(coreutils)。
在 bash 中,&&
标记命令行的结束。 在您的情况下,nohup
仅从 shell 获取参数sleep 15
。 其余部分是 shell 的下一个命令。
由于nohup
不是 shell,您不能使用括号将参数“扩展”为nohup
,因为nohup
无法解释它并且不知道如何处理它。
一种解决方案是创建一个脚本(例如sleepdate
),其中包含sleep 15 && date
并将其用作参数nohup
:
nohup ./sleepdate &>> out.log &
或者使用 bash (可以解释&&
) 作为参数来nohup
nohup bash -c 'sleep 15 && date' &>> out.log &