如何在2分钟内每5秒运行一个shell脚本?
我已经看到了很多解决一半问题的方法——每5秒运行一次脚本 除此之外,我也只想让它运行2分钟 脚本的要点是在一段时间内在某个位置对RSSI进行采样:如何在2分钟内每5秒运行一个shell脚本?,shell,cron,scheduled-tasks,Shell,Cron,Scheduled Tasks,我已经看到了很多解决一半问题的方法——每5秒运行一次脚本 除此之外,我也只想让它运行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 rss
#!/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个变量,则很难跟踪这些参数
- 使用watch每5秒采样一次,cron将采样时间限制为2分钟(不是100%cron可以做到这一点)
- 2分钟的while循环(不知道如何做这样的while循环?)
- 使用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
受Petermm输入的启发,我设法让它工作起来,事实上,运行N个样本并在它们之间使用硬编码的rest对我来说效果更好
#!/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
作为尾部递归优化。使用exec是什么意思?新脚本似乎不起作用,我得到错误rssi_script.sh:13:rssi_script.sh:rssi_script:notfound