如何从cron运行bash脚本每隔15分钟传递一次更大的参数?

时间:2015-03-23 23:06:46

标签: bash cron

我有一个简单的脚本,我需要每天运行15分钟(直到我到达我的数据库中的最后一条记录)给它更大的论据。我知道如何使用常量参数 - 例如:

*/15 * * * * ./my_awesome_script 1

但我需要这个,让我们说,我们从早上8点开始:

at 8:00 it should run ./my_awesome_script 1
at 8:15 it should run ./my_awesome_script 2
at 8:30 it should run ./my_awesome_script 3
at 8:45 it should run ./my_awesome_script 4
at 9:00 it should run ./my_awesome_script 5
...

如何制作这样的东西?

我提出了临时解决方案:

#!/bin/bash

start=$1
stop=$2

for i in `seq $start $stop`
do
        ./my_awesome_script $i
        sleep 900
done

1 个答案:

答案 0 :(得分:1)

写一个包装器脚本是非常必要的(为了理智)。该脚本可以在文件中记录该数字的先前值并将其递增并记录下一次准备好的新值。那你就不需要循环了。当您到达数据库中的数据末尾时,您将如何判断?你也需要知道如何处理它。

cron条目:

*/15 * * * * ./wrap_my_awesome_script

wrap_my_awesome_script可能是:

crondir="$HOME/cron"
counter="$crondir/my_awesome_script.counter"
[ -d "$crondir" ] || mkdir -p "$crondir"
[ -s "$counter" ] || echo 0 > "$counter"
count=$(<"$counter")
((count++))
echo "$count" > $counter

"$HOME/bin/my_awesome_script" "$count"

我不确定你为什么要使用./my_awesome_script;这可能意味着您的脚本位于$HOME目录中。我将它保存在$HOME/bin中并在包装器脚本中使用该名称 - 如图所示。

请注意一般坚持将材料放在$HOME的某个子目录中,而不是直接放在$HOME中。保持您的主目录整洁通常是一个好主意。当然,您可以将文件和程序放在您喜欢的位置,但我建议尽可能有条理。如果你没有组织,那么在几年之内,你会希望你曾经去过。