Ich habe ein Python-Skript, das verwendet wird, um Daten von einem Server zu sammeln. Ich kann es als laufen:Split Zeitintervall im Batch
./ApiStreamingClient.py -w flow-index -n admin -p admin localhost 1477389500000000000 1477389900000000000 | gzip - > out.gz
wo 1477389500000000000
und 1477389900000000000
in Nanosekunden sind Zeit ein Intervall definieren.
Da der Dienst langsam ist, muss ich ein Bash-Skript schreiben, das den gleichen Code in Teilintervallen ausführt.
Dies ist mein aktueller Versuch, aber es gibt einige Fehler beim Kompilieren:
#!/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
~
Ich denke, der Fehler in ist, wie die while-Schleife definiert ist und in wie ich die batch_start
und batch_end
Variablen aktualisieren.
Können Sie mir bitte erklären, was mit diesem Code nicht stimmt? Mein Wissen o Bash ist nahe 0 und ich hätte gerne die funktionierende Version des Skripts und eine Erklärung der Probleme.
Thansk!
EDIT: ich immer noch Fehlermeldungen erhalten:
#!/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#
Haben Sie darüber nachgedacht, dies in Python zu tun? Es wäre passender, da Python besser an Arithmetik angepasst ist und es vermeiden würde, Ihrem Prozess eine andere Sprache hinzuzufügen. Ich könnte mich irren, aber ich bin mir ziemlich sicher, selbst wenn du noch nie eine Zeile Python geschrieben hast, könntest du in der Lage sein, es in einem halben Tag zu lernen. – Aaron
Glaubst du, es ist zu schwierig in bash? Ich bin mir nicht sicher, ob ich Python verwenden kann – Donbeo
Nein, es ist einfach, wenn Sie das richtige Werkzeug verwenden, siehe meine Antwort :) Das Problem ist auf lange Sicht: Wenn etwas in Ihrer Lösung bricht, benötigen Sie möglicherweise eine Ressource, die weiß Python und eine Ressource, die bash kennt, um sie zu debuggen. Auch Bash ist viel weniger effizient als Python, und das Erstellen von mehreren Python-Prozess statt nur einer muss auch Zeit kosten. – Aaron