循环cron任务
我需要建立一个每周电子邮件,周期之间的4个变化,例如循环cron任务,cron,crontab,Cron,Crontab,我需要建立一个每周电子邮件,周期之间的4个变化,例如 变异a 然后b 然后c 然后d 然后回到一个 等 每周 我希望使用4个cron任务(每个任务每4周发送一封电子邮件)来实现这一点,但我很难将它们错开,使每个任务在不同的一周开始,而不是让它们在第一周发送电子邮件,然后在接下来的4周内什么都没有 我的crontab现在看起来像这样: 0 8 * * 1/4 echo "Variation A" | mail -s "Test email" admin@mydomain.com 0 8
0 8 * * 1/4 echo "Variation A" | mail -s "Test email" admin@mydomain.com
0 8 * * 1/4 echo "Variation B" | mail -s "Test email" admin@mydomain.com
0 8 * * 1/4 echo "Variation C" | mail -s "Test email" admin@mydomain.com
0 8 * * 1/4 echo "Variation D" | mail -s "Test email" admin@mydomain.com
我觉得如果我能控制每个人第一次发送电子邮件的时间,那么我就能让它正常工作了
有人能想出更好的办法吗?最好只需要很少的脚本编写(我想把所有细节都保存在crontab中)这不是单靠cron就可以做到的。您必须使用某种脚本来执行此操作,存储您发送的最后一个变体,并根据该信息决定下一步发送哪个变体。cron条目看起来像:
0 8 * * 0 somescript.sh
这将在每个周日上午8点执行脚本。脚本本身必须决定发送哪条消息
您可以使用以下内容:
#!/bin/sh
STATEFILE='emailstate'
VARIATION=`cat emailstate 2>/dev/null`
case "$VARIATION" in
'4' )
# send variation 4
echo 'Sending variation 4'
VARIATION='1'
;;
'3' )
# send variation 3
echo 'Sending variation 3'
VARIATION='4'
;;
'2' )
# send variation 2
echo 'Sending variation 2'
VARIATION='3'
;;
* )
# send variation 1
echo 'Sending variation 1'
VARIATION='2'
;;
esac
echo $VARIATION > $STATEFILE
请使用“代码”上的“代码块”按钮,它很难读取。1)在单个值(而不是范围)上使用/不会起任何作用。2) 第五个字段是
一周中的一天
,而不是一个月中的一周或你想要的任何东西。或者,如果你选择一个日期和时间作为第一次运行的日期,问题就会变成无状态,因为你可以得到当前的日期和时间,然后找出你在循环中的位置。你建议的方法很好,很简单(而且可能是更好的选择)。这是一种很好的循环方法(我喜欢这样的事实,它不依赖日期为正确的一周获得正确的变化)。我想用“date+%s”,然后计算第一封电子邮件的日期和当前日期之间的差值,计算出我们目前在哪一周(但数学上有点令人不快)@Mark:这仍然是一种状态,每次跑步都不会改变。我确实考虑过这样的事情,但是我更喜欢我现在的方法,因为如果变化的数量改变了,行为仍然是正确的——跟随最后一个的行为将被发送。日期数学可能导致更改后发送任何更改,具体取决于更改日期。