簡體   English   中英

如何自動運行一長串與時間相關的CRON作業?

[英]How to automatically run a long list of time-dependent CRON jobs?

我希望運行基於TZ=America/New_York的CRON作業列表,並避免手動(逐行)設置CRON作業,因為我的CRON作業在增加,並且我還將擁有每分鍾運行一次的PHP腳本,從API獲取數據。

這是我的[第一次]偽bash腳本嘗試,肯定會遇到一些問題,這樣做似乎不正確。

  • 如何使與時間相關的CRON作業列表自動化?

  • 手動CRON作業設置和測試有哪些替代方案?

  • 也許,最好/可能用我所有的CRON作業編寫一個PHP文件,然后設置一個CRON作業來運行該PHP文件?

偽Bash腳本

#!/bin/bash

# There are three times that CRON jobs should be running:
# During pre-market exchanges
# During normal market hours
# During after hours or post-market exchanges

export TZ=America/New_York
server_name="$USER"

##Runs on live server
if [[ server_name=="em" ]]; then
    echo "CRON jobs only run on live servers 💛";
    exit
fi

#Market times: Before Premarket, Pre-market, Normal Market hours, Post-Market, After post market
pre_market_open=03:00
start_normal_market=09:00
end_normal_market=17:00
post_market_close=21:00

current_time=$(date '+%H:%M')
# current_time=5:23

#Read variables
IFS=: read hour_pre_market_open min_pre_market_open <<< "$pre_market_open"
IFS=: read hour_start_normal_market min_start_normal_market <<< "$start_normal_market"
IFS=: read hour_end_normal_market min_end_normal_market <<< "$end_normal_market"
IFS=: read hour_post_market_close min_post_market_close <<< "$post_market_close"
IFS=: read hour_current_time min_current_time <<< "$current_time"

#Calculate total minutes 
total_pre_market_open_min=$((10#$hour_pre_market_open*60 + 10#$min_pre_market_open))
total_start_normal_market_min=$((10#$hour_start_normal_market*60 + 10#$min_start_normal_market))
total_end_normal_market_min=$((10#$hour_end_normal_market*60 + 10#$min_end_normal_market))
total_post_market_close_min=$((10#$hour_post_market_close*60 + 10#$min_post_market_close))

total_current_time_min=$((10#$hour_current_time*60 + 10#$min_current_time))

# This function should be run during pre-market before market opens
function runCronDuringPreMarket(){
    0   0   1   1   *   sleep 19; rm -rf /home2/usco/master/blog-back/sectors >/dev/null 2>&1; wait
    3   *   *   *   *   sleep 27; rm -rf /home2/usco/master/cache >/dev/null 2>&1; wait
    6   */3 *   *   *   sleep 48; /usr/bin/php -q /home2/usco/master/cron/post/TweetUSCO.php >/dev/null 2>&1; wait
    9   *   *   *   *   sleep 12; /usr/bin/php -q /home2/usco/master/cron/equity/EQ.php >/dev/null 2>&1; wait
    echo "CRON jobs success 💚"
}

# This function should be run during normal market hours
function runCronDuringNormalMarket(){
    12  0   1   1   *   sleep 19; rm -rf /home2/usco/master/blog-back/sectors >/dev/null 2>&1; wait
    20  *   *   *   *   sleep 27; rm -rf /home2/usco/master/cache >/dev/null 2>&1; wait
    27  */3 *   *   *   sleep 48; /usr/bin/php -q /home2/usco/master/cron/post/TweetUSCO.php >/dev/null 2>&1; wait
    23,57   *   *   *   *   sleep 12; /usr/bin/php -q /home2/usco/master/cron/equity/EQ.php >/dev/null 2>&1; wait
    echo "CRON jobs success 💚"
}

# This function should be run after the market closes during post market 
function runCronDuringPostMarket(){
    29  0   1   1   *   sleep 19; rm -rf /home2/usco/master/blog-back/sectors >/dev/null 2>&1; wait
    37  *   *   *   *   sleep 27; rm -rf /home2/usco/master/cache >/dev/null 2>&1; wait
    58  */3 *   *   *   sleep 48; /usr/bin/php -q /home2/usco/master/cron/post/TweetUSCO.php >/dev/null 2>&1; wait
    3   *   *   *   *   sleep 12; /usr/bin/php -q /home2/usco/master/cron/equity/EQ.php >/dev/null 2>&1; wait
    echo "CRON jobs success 💚"
}

# This case should break based on total current time minutes 
case "$total_current_time_min" in
    before_premarket) "$total_current_time_min" -lt "$total_pre_market_open_min"; break;; 
    during_pre_market) "$total_current_time_min" -lt "total_start_normal_market_min"; runCronDuringPreMarket; wait; break;; 
    during_normal_market) "$total_current_time_min" -lt "$total_pre_market_open_min"; runCronDuringNormalMarket; wait; break;;
    during_postmarket) "$total_current_time_min" -lt "$diff_postmarket_to_end"; runCronDuringPostMarket; wait; break;;
    after_postmarket) break;;
esac

產品規格

  • PHP7.1
  • cPanel 78.0.18

bash無法識別Cron計划字符串(29 0 1 1 *)。 您可以嘗試編寫一些東西來解析它們,並決定在當前時間與模式匹配時做一些事情……但這就是Cron所做的。

不要為此使用bash; 使用Cron。

另請參閱crontab在某些小時之間每15分鍾運行一次

暫無
暫無

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

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