回溯和例行腳本分析

上一篇寫到回溯和例行的工作,這一片來分析回溯和例行的shell腳本

回溯:

啓動命令:nohup sh bin/回溯.sh >log.回溯 &

回溯.sh

step=0
for((i=0;i<=400;i+=1))
do
    let step+=1
    j=$(($i+1))
    end_tm=`date +"%Y-%m-%d 00:00:00" -d "-$i""day"`
    begin_tm=`date +"%Y-%m-%d 00:00:00" -d "-$j""day"`
    echo $j" "$begin_tm" "$end_tm
    nohup python bin/回溯_off.py $i "$begin_tm" "$end_tm" > logs/log.回溯.$i &
    if [ $step -eq 10 ] ; then
        step=0
        wait
    fi
done

說明:

step表示啓動進程數,每次啓動10個進程,然後等待現有進程結束

i表示天數,數據不會超過400天,j=i+1,也就是處理的是從i 天到i+1天的數據

let 命令是 BASH 中用於計算的工具,用於執行一個或多個表達式,變量計算中不需要加上 $ 來表示變量。如果表達式中包含了空格或其他特殊字符,則必須引起來。

用nohup運行命令可以使命令永久的執行下去,和用戶終端沒有關係,例如我們斷開SSH連接都不會影響他的運行,注意了nohup沒有後臺運行的意思;&纔是後臺運行.

-eq和=都有判斷兩邊是否相等的功能,-eq偏向整數數字,不能進行字符串的測試,=既適用於數字又適用於字符串。

回溯_off.py

# coding=utf-8

"""
特徵提取的入口
"""

from 回溯_fea import *
import sys
tab_name = "回溯_fea"
if __name__ == '__main__':
    step = sys.argv[1] # 這個參數以前用,現在提取到了外邊,在shell中使用
    start_tm = sys.argv[2]
    end_tm = sys.argv[3]
    log_file = "./logs/log.回溯_fea_off.%s" % time.strftime("%Y%m%d", time.localtime())
    set_logger_log(logging.INFO, log_file)
    serial_list = read_pdl_loan_serial(start_tm, end_tm)
    for row in serial_list:
        serial_id = row['serial_id']
        user_id = row['user_id']
        run_fea(serial_id, user_id, feature_config, tab_name)

例行:

例行.sh

#!/bin/bash
# 線下服務啓動

# 清除兩天前的日誌
day2ago=`date +"%Y%m%d" -d "-2day"`
rm -rf logs/log.*.$day2ago

# 同步特徵
today=`date +%Y%m%d`

function start_func()
{
    nohup python bin/$1.py > logs/log.$1 2>&1 &
}

arr=("sms_keys_fea_off" "phone_contact_fea_off" "phone_location_fea_off" "phone_record_fea_off" "user_env_fea_off" \
"phone_basic_data_off" "person_info_off" "sms_keys_fea2")

for compute_job in ${arr[@]};
do
    start_func $compute_job
done

$1表示讀取第一個參數

1>表示標準輸出重定向,2>表示將錯誤信息重定向,2>&1,表示將錯誤信息重定向到1的通道,也就是將所有信息寫到一起。

@表示所有參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章