У меня есть сценарий bash, который запускает несколько экспериментов (время реализации и т. Д.), Но я не хочу запускать тот же эксперимент, если он уже запущен.Bash: проверить, запущен ли скрипт на этом компьютере
Эксперимент уже запущен, если такой же компьютер создал выходной файл, содержащий 280 строк.
Что мне теперь делать, состоит в следующем (для всех экспериментов):
# Remove the prefix
tmp=${3#*/}
# Remove the suffix
instance=${tmp%.*}
# Set the output path
output_path=statistics/experiment-$1-$2-${instance}.csv
if [ -f ${output_path} ];
then
# The output file exists, check if it contains 280 lines
LC=`wc -l ${output_path} | cut -f1 -d' '`
if [[ ${LC} == 280 ]]; then
# It did, thus we are done
echo "$(date -R) [SKIPPING ] Instance already processed for ${1} (${2}) on ${3} - Skipping experiment!"
# Do not do anything else
exit 0
fi
# The experiment was stopped prematurely, rerun it
echo "$(date -R) [RERUNNING] Instance not fully processed for ${1} (${2}) on ${3} - Rerunning experiment! (${LC}/280 runs)"
# Remove old file
rm -f ${output_path}
fi
# Run the experiment
echo "$(date -R) [RUNNING ] Running experiment for ${1} (${2}) on ${3}"
start=$(date +%s)
./bin/Experiment --algorithm $1 --dbms $2 --instance_path $3 > ${output_path}
total=$(($(date +%s)-${start}))
echo "$(date -R) [FINISHED ] Finished experiment for ${1} (${2}) on ${3} in ${total} seconds."
Но это вовсе не чек, если эксперимент работал на том же компьютере. Первоначально я хотел использовать ip link show eth0 | awk '/ether/ {print $2}'
, чтобы получить MAC-адрес компьютера, а затем сохранить выходной файл в каталоге, например. statistics/ff:ff:ff:ff:ff/experiment1.csv
, но (при условии, что установлен ip
) гарантировано ли, что указанная команда вернет MAC-адрес? Или есть другие способы однозначно идентифицировать компьютер из bash-скрипта?
Возможно, вы можете использовать имя хоста вместо IP-адреса или MAC-адреса? – Pierre
Я думаю, что для моего варианта использования этого должно быть достаточно! – YnkDK