Thread (7 messages) 7 messages, 4 authors, 2021-03-30

Re: [PATCH] maintenance: specify explicit stdin for crontab

flat view

From: Derrick Stolee <hidden>
Date: 2021-03-30 19:38:46

On 3/30/2021 1:43 PM, Todd Zullinger wrote:
Hi,

Derrick Stolee wrote:
quoted
On 3/30/2021 1:41 AM, Martin Ågren wrote:
quoted
On Mon, 29 Mar 2021 at 23:23, Kevin Daudt [off-list ref] wrote:
quoted
There are multiple crontab implementations that require stdin for
editing a crontab to be explicitly specified as '-'.
Amusingly, I wrote the exact same patch 2 weeks ago
(including not dropping the `argc == 2` which Martin
mentioned).  That was in response to a report in the Fedora
bugzilla:

    https://bugzilla.redhat.com/1939930

I thought cronie might be rather rare with it's non-POSIX
handling of crontab without arguments.
Thanks for this link! I appreciate the context.
 
In the end, the cronie folks upstream adjusted things so
that crontab behaves as defined by POSIX if stdin is not a
TTY:

    https://github.com/cronie-crond/cronie/commit/8b0241f
quoted
That allows cronie to behave more sensibly for interactive
use without breaking tools like git maintenance.  And it let
me sidestep proposing a patch to git (or worse, maintaining
it in the Fedora packages).
Nice!
 
But I didn't dig in to find out whether or how many other
crontab implemntations had also eschewed the (rather poor)
POSIX-confirming behavior.  Knowing there are several among
popular OS's makes it easy to see something like this patch
being generally useful.

Though, as Derrick notes below, we would break systems which
implement crontab strictly per the POSIX spec.  I don't know
how many crontab's don't accept `-`.

At the time, I checked on an older OmniOS system I had
access to (based on Illumos/OpenSolaris) and it did not
accept `-`.  So my quick sample size of 3 (Fedora, CentOS,
and OmniOS) I had a 1/3 failure rate.
quoted
Thank you for reporting this, especially with a patch!

However, I'm not sure about this adding of '-' being something that
crontab ignores so commonly. My Ubuntu machine reports this:

$ crontab -e -
crontab: usage error: no arguments permitted after this option
usage:  crontab [-u user] file
        crontab [ -u user ] [ -i ] { -e | -l | -r }
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)

Is there a way we could attempt writing over stdin, notice the
failure, then retry with the '-' option?
You'd skip the `-e` there, no?  Running `crontab -` in a
current ubuntu container with the cron package installed
(what looks like vixie-cron-3.0pl1) works as expected.
Yes, this is my mistake. My machine supports "crontab -".
Perhaps a Makefile knob to allow systems with such a crontab
to adjust the behavior would be an alternative to detecting
and retrying?

NEEDS_CRONTAB_STDIN_OPT or something like that, with
config.mak.uname to override whichever default is chosen.
Whether that's a better option really depends on how much
effort it is to add and maintain the detection in the code
weighed against how many systems would need to have the
default changed.

Mildy related, I wonder whether we'll eventually see a patch
to use systemd timers instead of cron (optionally, of
course).  Fedora, for example, doesn't install crond by
default anymore.  (Though, warts and all, I still prefer
crond myself.)
Perhaps the best way to approach this is to try adding '-'
by default, and remove it and try again on a failure. If the
usage is actually a problem, that first command should fail
quickly. I'm not sure if we could rely upon a specific
category of error codes or if we should just say "non-zero
exit means retry".

Thanks!
-Stolee
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help