Subject: Re: Another approach for periodic.d
To: Julio M. Merino Vidal <jmmv@menta.net>
From: Jim Bernard <jbernard@mines.edu>
List: tech-userlevel
Date: 04/27/2004 09:15:09
On Sun, Apr 25, 2004 at 11:44:39PM +0200, Julio M. Merino Vidal wrote:
> 
> Consider the following /etc/defaults/periodic.conf:
> 
> task1=daily
> task1_step=1000
> task2=daily
> task2_step=2000
> task3=daily
> task3_step=3000
> task4=weekly
> task4_step=1000
> ..
> 
> And so on.  /etc/periodic.conf simply overrides taskN style variables to
> change the periodicity of when they are executed, and/or changes taskN_step
> variables to modify the order in which tasks are executed.
> 
> Then, you'd do this from cron:
> 
> run-parts -c /etc/periodic.conf -s daily /etc/periodic.d
> 
> I think the advantages of this are:
> 
> - A single configuration file to tune when tasks are executed and the order
>   between them.

  I like this.

> - No need to mess with file names to change the order of tasks.  And the
>   order is very concrete, not like rcorder (which most of you disliked).

  I like this.

> - A generic script to run the scripts that could be used in other places.

  This too.

> Comments?

  But I'd much rather not have to specify sequence numbers for the tasks
(and I'm not fond of the resulting clutter).  It means you have to examine
the sequence numbers carefully to determine the actual sequence of tasks,
rather than having it presented to you in some obvious way by the layout
of the file(s).  And you have to specify sequence numbers for all of the
tasks, even though the sequence doesn't matter for most of them.  Further,
if you change a task from daily to weekly (e.g.), a completely new set of
sequence numbers becomes relevant to it.  Switching back and forth (for
those who have trouble making up their minds) then becomes burdensome.

  Now doing away with the sequence numbers seems to make it difficult to
have system (default) updates automatically add new tasks without the need
for user intervention, since it would seem to imply that the actual sequence
of tasks must be specified by the order of lines in a single file, which
would have to be the local conf file if the user wants to make any changes
from the default.  I see a few options to address this, none of them without
fault:

  1 Use rcorder.  This makes the sequencing more difficult to discover,
    but it's easy to get interdependent tasks in the right order.  It also
    makes it necessary to modify existing scripts (or copies thereof) to
    make changes in the sequencing.  Since the order doesn't really matter
    in most cases, this is overkill.  But for the same reason, maybe it
    doesn't matter much if it's hard to discover the order and hard to
    change the default order.

  2 Live with the fact that the user has to copy the entire defaults file
    in order to make changes, and the local conf file won't be automatically
    updated if there are new tasks added to the defaults file.  etcupdate
    can help with this, but it's still an annoying issue.

  3 Add a configuration tool that would present the user with lines whose
    sequence represents the execution sequence, but that translates any
    user changes into some appropriate set of local conf-file bits in
    whatever format is chosen.  The underlying implementation then becomes
    unimportant (sequence numbers would be OK) and is free to change later.
    But it adds another layer that removes the user from what's really going
    on, and adds complexity and opportunity for failure due to bugs in the
    config tool.

  4 Have the super script (run-parts or whatever) merge the lists of tasks,
    so that any that appear in the local conf file cause deactivation of
    any specifications in the defaults file.  This way, new tasks that
    show up in the defaults file will be run automatically.  To give the
    user some control over sequencing, here are some possibilities:

      a Make the local conf file have "before" and "after" sections, whose
        tasks are entirely executed before and after the tasks in the defaults
        file.  If the sequence of tasks in the defaults file needs to be
        changed beyond movement of a single task to the before or after
        sections, or a local task needs to be inserted between two tasks in
        the defaults file, it could be necessary to copy a substantial chunk
        of the defaults file to the local conf file.

      b Provide "before" and "after" keywords to allow arbitrary insertion
        by the user.  In the absence of those, the tasks would be run in
        script order, as determined by some merger of the defaults file and
        the local conf file.  E.g.,

          run task3 weekly
          run task1 daily before task5
          run task6 daily after task2

        This is somewhat like using rcorder, but control over the sequencing
        is moved to the conf file, so that changes to the default sequencing
        don't require changes to the scripts.  And in most cases the sequence
        is simply that given in the merged conf file(s), with no need to
        specify it explicitly by keyword.  But the ordering can become less
        visually obvious than with a strictly line-ordered sequence, and it
        is possible to specify inconsistent ordering requirements.  This one
        could also include 4a.

      c For those few tasks for which sequencing is important, combine the
        scripts into a single script or use a wrapper script, rather than
        the individual scripts to run them.  In most such cases, it would be
        necessary to keep them together anyway, in the sense that changing
        one of them from daily to weekly (e.g.) would require changing them
        all and keeping the same order.  But this does reduce flexibility.
        This one could usefully include 4a.

  5 Attach the sequence numbers to the names of the scripts (or links to
    the scripts), letting the config file merely specify what is to run and
    how frequently.  This has most of the disadvantages of having the sequence
    numbers in the config files, though they'll be automatically presented
    in order by ls.

  I would lean toward 4b or 2, and I could live with 4a, 4c, or 1.  I don't
like sequence numbers in any form, including 5, and I'd much prefer to
avoid the need to use a config tool (3), beyond a simple text editor.

--Jim