У меня есть сценарий 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#
Рассматривали ли вы это в python? Это было бы более уместно, поскольку python более приспособлен к арифметике, и это не позволит добавить к вашему процессу другой язык. Возможно, я ошибаюсь, но я уверен, что даже если вы никогда не писали ни одну строку python, вы могли бы научиться достаточно, чтобы сделать это за полдня – Aaron
, вы думаете, что это слишком сложно в bash? Я не уверен, что могу использовать python – Donbeo
Нет, это легко, если вы используете правильный инструмент, см. Мой ответ :) Проблема в долгосрочной перспективе: если что-то ломается в вашем решении, вам может понадобиться как источник, который знает python и ressource, которые знают bash для его отладки. Кроме того, bash менее эффективен, чем python, и нерестование нескольких процессов python, а не только одно должно также стоить время. – Aaron