Nice! Thanks a lot.

I've made an AUR package for scron btw: 
https://aur.archlinux.org/packages/scron-git

On Sat, Jul 05, 2014 at 12:52:05PM +0300, Ari Malinen wrote:
> Maybe something like this:
> --- /home/defer/temp/scron/crond.c      2014-07-05 12:16:11.917457442 +0300
> +++ crond.c     2014-07-05 12:47:43.147434577 +0300
> @@ -23,6 +23,7 @@
>  struct range {
>         int low;
>         int high;
> +       int div;
>  };
> 
>  struct ctabentry {
> @@ -150,12 +151,15 @@ matchentry(struct ctabentry *cte, struct
>         size_t i;
> 
>         for (i = 0; i < LEN(matchtbl); i++) {
>                 /* this is the match-any case, '*' */
>                 if (matchtbl[i].r->low == -1 && matchtbl[i].r->high == -1)
>                         continue;
>                 if (matchtbl[i].r->high == -1) {
>                         if (matchtbl[i].r->low == matchtbl[i].tm)
>                                 continue;
> +                       else if (matchtbl[i].tm % matchtbl[i].r->div == 0)
> +                               continue;
>                 } else {
>                         if (matchtbl[i].r->low <= matchtbl[i].tm &&
>                             matchtbl[i].r->high >= matchtbl[i].tm)
> @@ -171,7 +175,7 @@ matchentry(struct ctabentry *cte, struct
>  static int
>  parsefield(const char *field, int low, int high, struct range *r)
>  {
> -       int min, max;
> +       int min, max, div;
>         char *e1, *e2;
> 
>         if (strcmp(field, "*") == 0) {
> @@ -180,6 +184,7 @@ parsefield(const char *field, int low, i
>                 return 0;
>         }
> 
> +       div = -1;
>         max = -1;
>         min = strtol(field, &e1, 10);
> 
> @@ -190,6 +195,15 @@ parsefield(const char *field, int low, i
>                 if (e2[0] != '\0')
>                         return -1;
>                 break;
> +       case '*':
> +               e1++;
> +               if (e1[0] == '/') {
> +                       e1++;
> +                       div = strtol(e1, &e2, 10);
> +                       if (e2[0] != '\0')
> +                               return -1;
> +                       break;
> +               }
>         case '\0':
>                 break;
>         default:
> @@ -204,6 +218,7 @@ parsefield(const char *field, int low, i
> 
>         r->low = min;
>         r->high = max;
> +       r->div = div;
>         return 0;
>  }
> 
> On Sat, Jul 5, 2014 at 12:35 PM, Dimitris Papastamos <s...@2f30.org> wrote:
> > On Sat, Jul 05, 2014 at 11:41:00AM +0400, Jack L. Frost wrote:
> >> No */n for “every n <unit>”?
> >> Pretty much useless without that if you ever need a command to be run 
> >> every five minutes, for example.
> >
> > I've forked scron[0] and I plan to implement */n at some point.  If
> > you get to it first, please send a patch here.
> >
> > [0] http://git.2f30.org/scron
> >



Reply via email to