如何每5秒运行一次shell脚本2分钟?

时间:2013-02-19 13:06:24

标签: 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 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秒,我不确定命令行参数将如何传递到这个并且如上所述我可能会添加一些新的命令行参数因此可能导致问题(额外工作)

如果有任何我错过或有帮助的信息,请告诉我,并感谢任何人可以给予的任何帮助。

2 个答案:

答案 0 :(得分:0)

#!/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

答案 1 :(得分:0)

受到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