Я надеюсь запустить список заданий CRON на основе TZ=America/New_York
и избегать установки заданий CRON вручную (построчно), так как мои задания CRON растут, и у меня также будут PHP-скрипты, которые должны запускаться каждую минутуполучить данные из API.
Это моя [первая] попытка сценария псевдо-bash, которая, безусловно, должна иметь несколько проблем, и, похоже, это неправильно.
Как автоматизировать список зависящих от времени заданий CRON?
Каковы альтернативы ручной настройке и тестированию задания CRON?
Может быть, было бы лучше / возможно написать файл PHP со всеми моими заданиями CRON, а затем установить одно задание CRON для запуска этого файла PHP?
Pseudo Bash Script
#!/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
Технические характеристики