2016-10-25 5 views
0

У меня есть сценарий python, который используется для сбора данных с сервера. Я могу запустить его как:промежуток времени разделения в партии

./ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 | gzip - > out.gz 

где 1477389500000000000 и 1477389900000000000 по времени в наносекунд, определяющих интервал.

Поскольку служба работает медленно, мне нужно написать сценарий bash, который запускает один и тот же код в подинтервалах.

Это моя нынешняя попытка, но есть некоторые ошибки при компиляции:

#!/bin/bash 

file_name=$1 
data_type=$2 
username=$3 
password=$4 
address=$5 
start_time=$6 
end_time=$7 

set batch_size = 1000000000 
set batch_start = start_time 
set batch_end = current_time + batch_size 

while (("$batch_end" < "$end_time")) 

do 

    echo "iteration $i batch_start=$batch_start batch_end=$batch_end" 
    ./$file_name -w flow-index -n $username -p $password $address $batch_start $batch_end | gzip > "out 
    set /a batch_start = batch_end + 1 
    set /a batch_end = batch_start + batch_size 
done 
~ 

Я думаю, что ошибка в том, как определен цикл в то время как и в том, как я обновить batch_start и batch_end переменных.

Не могли бы вы объяснить мне, что не так с этим кодом? Мои знания o bash близки к 0, и я хотел бы иметь рабочую версию сценария и объяснение проблем.

Thansk!

EDIT: Я все еще получаю ошибки:

#!/bin/bash 

file_name=$1 
data_type=$2 
username=$3 
password=$4 
address=$5 
start_time=$6 
end_time=$7 

batch_size = 1000000000 
batch_start = $start_time 
batch_end = $((current_time + batch_size)) 


while (("$batch_end" < "$end_time$)) 
do 

    echo "iteration $i batch_start=$batch_start batch_end=$batch_end" 
    ./$file_name -w flow-index -n $username -p $password $address $batch_start $batch_end | gzip > "out_$i.gz" 
    batch_start =$((batch_end + 1)) 
    batch_end =$((batch_start + batch_size)) 
done 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
~ 
probe27:/data/misC# 
probe27:/data/misC# 
probe27:/data/misC# 
probe27:/data/misC# 
probe27:/data/misC# sh GetStreamingFlowData.sh ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 
GetStreamingFlowData.sh: line 11: batch_size: command not found 
GetStreamingFlowData.sh: line 12: batch_start: command not found 
GetStreamingFlowData.sh: line 13: batch_end: command not found 
GetStreamingFlowData.sh: line 20: unexpected EOF while looking for matching `"' 
GetStreamingFlowData.sh: line 24: syntax error: unexpected end of file 
probe27:/data/misC# 
+0

Рассматривали ли вы это в python? Это было бы более уместно, поскольку python более приспособлен к арифметике, и это не позволит добавить к вашему процессу другой язык. Возможно, я ошибаюсь, но я уверен, что даже если вы никогда не писали ни одну строку python, вы могли бы научиться достаточно, чтобы сделать это за полдня – Aaron

+0

, вы думаете, что это слишком сложно в bash? Я не уверен, что могу использовать python – Donbeo

+0

Нет, это легко, если вы используете правильный инструмент, см. Мой ответ :) Проблема в долгосрочной перспективе: если что-то ломается в вашем решении, вам может понадобиться как источник, который знает python и ressource, которые знают bash для его отладки. Кроме того, bash менее эффективен, чем python, и нерестование нескольких процессов python, а не только одно должно также стоить время. – Aaron

ответ

0

Это работа для seq:

start=1477389500000000000 
end=1477389900000000000 
step=1000000000 

for current_step in $(seq $start $step $end); do 
    echo $current_step 
done 
+0

Спасибо, что вы тоже написали решение python? – Donbeo

+0

Ну, я бы хотел, но сейчас я занят и не знаком с питоном, что могу сделать это через минуту. Я посмотрю, смогу ли я найти достаточно времени в следующие часы, но вы могли бы также открыть другой вопрос. – Aaron

0

У вас есть синтаксис для присвоения значения переменной неправильно. Вы пишете сценарий bash, а не DOS batch файл.

#!/bin/bash 

file_name=$1 
data_type=$2 
username=$3 
password=$4 
address=$5 
start_time=$6 
end_time=$7 

batch_size=1000000000 
batch_start=$start_time 
batch_end=$((current_time + batch_size)) 

while (("$batch_end" < "$end_time")) 

do 

    echo "iteration $i batch_start=$batch_start batch_end=$batch_end" 
    ./$file_name -w flow-index -n "$username" -p "$password" "$address" "$batch_start" "$batch_end" | gzip -c > out 
    batch_start=$((batch_end + 1)) 
    batch_end=$((batch_start + batch_size)) 
done 
+0

У меня все еще есть некоторые ошибки. Я отредактировал вопрос – Donbeo

+0

@Donbeo у вас есть дополнительные пробелы: 'переменные = значение' breaks,' variable = value' или 'variable = value' work – Aaron

Смежные вопросы