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

时间:2014-06-09 10:23:07

标签: bash shell curl asynchronous

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

wait [sec]

命令并执行不同等待期间的不同功能,如

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

2 个答案:

答案 0 :(得分:2)

要试验的东西:

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

答案 1 :(得分:0)

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

sleep 14 && wget http://yoursitehere.com &
sleep 18 && wget http://yoursitehere.com &
sleep 44 && wget http://yoursitehere.com &

这将创建一个后台任务,该任务休眠一段固定的时间,然后运行命令。它不会等待每个任务完成。

&&表示如果前一项没有错误完成,请执行下一项。