Bash 如何在shell脚本中进行异步函数调用

Bash 如何在shell脚本中进行异步函数调用,bash,shell,curl,asynchronous,Bash,Shell,Curl,Asynchronous,我有一个由shell脚本执行的curl命令集合。现在我想要的是所有这些命令都必须以固定的时间间隔执行(这对于每个curl url都是不同的),所以我想要做的是对 等待[秒] 命令并针对不同的等待时间执行不同的功能,如 启动5个定时器,一个用于120秒,2个用于30秒,3个用于3000秒等。 一旦它们完成,我想触发附加到每个超时的处理函数的执行。 我可以在javascript和nodejs中轻松做到这一点,因为它们是事件驱动编程语言。但我对shell脚本知之甚少。那么,我还可以如何实现这个或hot

我有一个由shell脚本执行的curl命令集合。现在我想要的是所有这些命令都必须以固定的时间间隔执行(这对于每个curl url都是不同的),所以我想要做的是对

等待[秒]

命令并针对不同的等待时间执行不同的功能,如

启动5个定时器,一个用于120秒,2个用于30秒,3个用于3000秒等。 一旦它们完成,我想触发附加到每个超时的处理函数的执行。 我可以在javascript和nodejs中轻松做到这一点,因为它们是事件驱动编程语言。但我对shell脚本知之甚少。那么,我还可以如何实现这个或hot来在shell脚本中进行这样的异步调用呢?
我不知道我是否足够清楚,如果我不清楚,我还应该提到哪些其他细节?

一些可以尝试的东西:

delayed_ajax() {
  local url=$1
  local callback=$2
  local seconds=$3

  sleep $seconds
  curl -s "$url" | "$callback"
}

my_handler() {
  # Read from stdin and do something.
  # E.g. just append to a file:
  cat >> /tmp/some_file.txt
}

for delay in 120 30 30 3000 3000; do
  delayed_ajax http://www.example.com/api/something my_handler $delay &
done

您还可以使用
&
符号将此任务置于后台:

sleep 14&&wgethttp://yoursitehere.com &
睡眠18&wgethttp://yoursitehere.com &
睡眠时间(&W)http://yoursitehere.com &
这将创建一个在固定时间内休眠的后台任务,然后运行该命令。它不会等待每个任务完成


&&
这里的意思是,如果前一件事完成时没有错误,那么就做下一件事。

60秒的分辨率也是正确的,这就是为什么不将它们作为cron作业运行的原因?啊,是的,如果分钟的分辨率足够,cron可能是正确的工具。同样,如果希望在特定时间而不是在特定时间间隔运行命令,则
at
命令非常有用。还有分钟的决议。无论是
cron
,还是
at
都不需要
nohup
,如果使用我暗示的脚本化解决方案,您可能需要它。除非以
nohup
开头(或以
disown-h
或类似方式否认),否则脚本解决方案将在注销时被HUP信号杀死。非常感谢,他们确实为我的目的工作,将来我唯一的问题可能是每次超时都会分配太多进程,因为在不久的将来我会有很多进程。你看到我第一次错过了“和”吗?与it不同步。是的,bash倾向于产生大量进程。既然你进入了节点和JS(也许是咖啡脚本),你可以考虑在节点中做它吗?