循环cron任务

时间:2010-12-19 23:49:36

标签: cron crontab

我需要设置每周电子邮件,其中包含4种变体,例如

  1. 变种a
  2. 然后b
  3. 然后c
  4. 然后d
  5. 然后回到
  6. 每周。

    我想使用4个cron任务执行此操作(每个任务每4周发送一封电子邮件),但我无法将它们错开,以便每个任务在不同的一周启动而不是让他们在第一周发送他们的电子邮件,然后在接下来的4周内没有任何东西。

    我的crontab目前看起来像这样:

    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中的所有细节)

1 个答案:

答案 0 :(得分:0)

这不是你可以单独使用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