有什么办法可以让我不必手动更改 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
答案1
command
只需交换和的分配顺序maxruntime
并将其代入即可command
。
maxruntime="15s"
command="/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout ${maxruntime}"
答案2
关于您的代码的一些注释:
当您想将命令存储在变量中时,请使用数组(参见:我试图将命令放入变量中,但复杂的情况总是失败!)
command=(/usr/bin/stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout "$maxruntime") # then execute it like "${command[@]}" # with the quotes!
总是引用你的变量,除非你确切知道为什么要取消引用它们(参见:忘记在 bash/POSIX shell 中引用变量的安全隐患)
您有一些重复的代码,因此使用一个函数:
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"
不要使用全大写变量名,把它们留给 shell。有一天你会写完
PATH=xyz
然后想知道为什么你的脚本坏了。你不需要重复使用
>/dev/null 2>/dev/null
-->>/dev/null 2>&
或 bash 特定的&>/dev/null
- 使用https://www.shellcheck.net检查你的代码是否有错误。