Есть ли способ, чтобы мне не приходилось вручную изменять maxruntime?
Так что --timeout "time" = maxruntime
SCRIPTS="/home/andy/bin/CPU_Stress_Test.txt"
command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 15s"
maxruntime=15s
rm $SCRIPTS
echo $command
$command >/dev/null 2>/dev/null &
watchpid=$!
date +"%Y-%m-%d-%H:%M:%S" >> $SCRIPTS
sensors -f | grep "temp4" >> $SCRIPTS
sensors -f | grep "fan1" >> $SCRIPTS
/bin/sleep "$maxruntime"
if [ -d "/proc/$watchpid" ]
then
echo "Max runtime exceeded, killing PID $watchpid"
if /bin/kill -9 "$watchpid" >/dev/null 2>/dev/null
then
echo "Killed."
exit 0
else
echo "Could not kill, please investigate manually."
exit 1
fi
fi
date +"%Y-%m-%d-%H:%M:%S" >> $SCRIPTS
sensors -f | grep "temp4" >> $SCRIPTS
sensors -f | grep "fan1" >> $SCRIPTS
Некоторые примечания по Вашему коду:
, когда Вы хотите сохранить команду в переменной, используйте массив (см.: я пытаюсь поместить команду в переменную, но сложные случаи всегда перестали работать! )
command=(/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout "$maxruntime")
# then execute it like
"${command[@]}" # with the quotes!
всегда заключают Ваши переменные в кавычки, если Вы не знаете точно, почему Вы хотите их, закрыл кавычки (см.: последствия безопасности упущения заключить переменную в кавычки в оболочках удара/POSIX )
у Вас есть некоторый дублированный код, так используйте функцию:
get_sensor_info() {
date +"%Y-%m-%d-%H:%M:%S"
# if you don't care about order of "temp4" or "fan1"
sensors -f | grep -E 'temp4|fan1'
# or if you do care about the order, then you still only need to call sensors once
sensor_info=$(sensors -f)
echo "$sensor_info" | grep temp4
echo "$sensor_info" | grep fan1
}
get_sensor_info >> "$stress_log"
не используют имена переменной ALLCAPS, оставляют имена переменной для оболочки. Однажды Вы запишете PATH=xyz
и затем зададитесь вопросом, почему Ваш сценарий повреждается.
Вы не должны повторять себя с >/dev/null 2>/dev/null
-> >/dev/null 2>&
или определенное для удара &>/dev/null
Просто переключите порядок присвоений для command
и maxruntime
и замените им в command
.
maxruntime="15s"
command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout ${maxruntime}"