如何在不休眠的情况下在 X 秒后运行命令。或者使用休眠但不使用 shell 仅等待该命令的响应?
我用过这个,但是没用
sleep 5 ; ls > a.txt
我需要在后台运行它。我尝试不在脚本中运行它,我尝试ls
在 5 秒后运行它,并且 shell 不会只是等待睡眠结束
答案1
Hennes 建议的更简洁的写法是
(sleep 5; echo foo) &
或者,如果你需要超过几秒钟,你可以使用at
。有三种方式可以发出命令at
:
管道:
$ echo "ls > a.txt" | at now + 1 min warning: commands will be executed using /bin/sh job 3 at Thu Apr 4 20:16:00 2013
将要运行的命令保存在文本文件中,然后将该文件传递给
at
:$ echo "ls > a.txt" > cmd.txt $ at now + 1 min < cmd.txt warning: commands will be executed using /bin/sh job 3 at Thu Apr 4 20:16:00 2013
您还可以
at
从 STDIN 传递命令:$ at now + 1 min warning: commands will be executed using /bin/sh at> ls
然后按CtrlD退出
at
shell。该ls
命令将在一分钟内运行。
您可以以 格式给出非常精确的时间[[CC]YY]MMDDhhmm[.ss]
,例如
$ at -t 201412182134.12 < script.sh
这将在 2014 年 12 月 18 日 21:34 12 秒时运行脚本。script.sh
因此,理论上,您可以用它at
来运行五秒钟后的事情。但是,这有点像用坦克打苍蝇,Hennes 的建议更好。
答案2
您可以通过在后台启动 shell 或脚本来解决此问题。
例子:
/bin/sh -c "睡眠 5;回显 foo" & [1] 63791 > 此处激活 shell 提示符 foo 5 秒后出现输出。
答案3
这就是您在 4 小时后启动 apache 网络服务器的方式。我完全理解您想要它而不需要命令sleep
。 但是我使用了不同的方法,即使在使用命令注销后也能保持命令运行nohup
。不要忘记&
在末尾添加字符。它是下面整个命令的一部分。它有助于使命令运行与命令行提示符分离。
nohup sleep 14400 && service apache2 start &