几秒后执行命令(不休眠)

几秒后执行命令(不休眠)

如何在不休眠的情况下在 X 秒后运行命令。或者使用休眠但不使用 shell 仅等待该命令的响应?

我用过这个,但是没用

sleep 5 ; ls > a.txt

我需要在后台运行它。我尝试不在脚本中运行它,我尝试ls在 5 秒后运行它,并且 shell 不会只是等待睡眠结束

答案1

Hennes 建议的更简洁的写法是

(sleep 5; echo foo) & 

或者,如果你需要超过几秒钟,你可以使用at。有三种方式可以发出命令at

  1. 管道:

    $ 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
    
  2. 将要运行的命令保存在文本文件中,然后将该文件传递给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
    
  3. 您还可以at从 STDIN 传递命令:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    然后按CtrlD退出atshell。该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 &

相关内容