簡體   English   中英

如何在 shell 腳本中進行異步函數調用

[英]How to make asynchronous function calls in shell scripts

我有一組要由 shell 腳本執行的 curl 命令。 現在我想要的是所有這些命令都必須以固​​定的時間間隔執行(每個 curl url 都不同)所以我想要做的是異步調用

wait [sec]

命令並在不同的等待時間執行不同的功能,例如

啟動 5 個計時器,一個 120 秒,2 個 30 秒,3 個 3000 秒等,然后一旦它們完成,我想觸發附加到每個超時的處理程序函數的執行。 我可以在 javascript 和 nodejs 中輕松地做到這一點,因為它們是事件驅動的編程語言。 但我對 shell 腳本知之甚少。 那么,我還能如何在 shell 腳本中實現這個或 hotto 進行這樣的異步調用? 我不知道我是否足夠清楚,如果我不清楚,我還應該提到哪些細節?

可以嘗試的東西:

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 && wget http://yoursitehere.com &
sleep 18 && wget http://yoursitehere.com &
sleep 44 && wget http://yoursitehere.com &

這將創建一個休眠固定時間的后台任務,然后運行該命令。 它不會等待每個任務完成。

&&這里的意思是如果前一件事沒有錯誤地完成,就做下一件事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM