如何每5秒钟运行一次shell脚本2分钟?
问题描述:
我已经看到很多解决方案来解决我的问题 - 每5秒运行脚本。如何每5秒钟运行一次shell脚本2分钟?
除此之外,我也只希望它只运行2分钟。
脚本的点是在某个位置采样RSSI一段时间:
#!/bin/bash
RSSI_CSV=$1
DISTANCE=$2
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\')
printf "$DISTANCE,$RSSI\n" >> $RSSI_CSV
在命令行中它被称为有:
sh rssi_script.sh output.csv position
会是什么解决我的问题的最强大的解决方案?
可能性我已经考虑:
- 重复的脚本中本身40倍(测量RSSI 40倍,并输出到CSV 40倍,该位置将在整个实验中一样),这也将解决限制运行到2分钟的问题。我可能会添加一些新的命令行参数,如果每次都必须更改40个变量,那么可能很难记录下来。
- 使用手表每5秒采样一次,cron将其限制为2分钟(不是100%cron可以做的这个)
- 一个while循环2分钟(不确定如何做一个while循环是这样的?)在每个循环结束时用5秒睡眠
- 使用cron启动shell脚本为40个进程脚本和延迟每次迭代5秒,我不知道如何通过命令行参数传递,正如我上面所说,我可能会添加一些新的命令行参数,以便可能会导致问题(额外的工作)
让我知道是否有任何信息我已经错过或将帮助,并感谢任何人可以给予任何帮助。
答
#!/bin/bash
[ "$3" = "0" ] && { exit; }
RSSI_CSV=$1
DISTANCE=$2
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\')
printf "$DISTANCE,$RSSI\n" >> $RSSI_CSV
sleep 5
N=$3
$0 $1 $2 $((N-1))
像这样运行:
sh rssi_script.sh output.csv position 24
答
通过PeterMmm的输入启发我设法得到它的工作,而事实上它为我的作品更好地与他们
之间的硬编码的休息运行N个样本#!/bin/bash
RSSI_CSV=$1
DISTANCE=$2
N=$3
while [ $N -ne 0 ]
do
RSSI=$(iwconfig wlan0 | awk -F'[ =]+' '/Signal level/ {print $7}\')
printf "$DISTANCE,$RSSI\n" >> $RSSI_CSV
sleep 2
((N--))
echo $N
done
exit
至少在最后一行使用'exec'作为尾递归优化。 – chepner 2013-02-19 14:01:39
你是什么意思使用exec?新脚本似乎不工作,我得到错误rssi_script.sh:13:rssi_script.sh:rssi_script:找不到 – 2013-02-19 15:32:13