delayer - A pipe to delay line-based input by a given time
some-program | delayer
[--[no-]buffered] [--delay seconds]
[--store filename] -- some-other-program
[args ...]
Legacy calling convention:
some-program | delayer seconds
some-other-program [args ...]
The delayer program implements a delaying pipe. Lines sent
to the standard input of the process are spooled, and only printed to the
standard input of some-other-program after a certain delay time has
passed.
The main use case is for a news feed that deliberately should not
distribute articles as soon as possible. One reason is giving cancel control
articles and NoCeM messages time to arrive so that innd remembers the
Message-IDs of those cancelled articles before they actually arrive. It
permits cancelling articles before they are locally stored and spread to
other peers. The delay can be set up for outgoing feeds wanting that or,
even better for not slowing the propagation of articles, internally between
a frontend instance of innd receiving the articles from all your
peers and another local instance of innd fed by your frontend with a
delay except for cancels and NoCeM articles.
Another use case is using a link only as a backup.
The steps to set up a delayed feed using delayer and
innfeed are:
- Choose a name for that feed, e.g.
"innfeed-delayed".
- In pathetc, copy innfeed.conf to
innfeed-delayed.conf.
- Edit innfeed-delayed.conf in pathetc, and change the
occurrences of "innfeed" to
"innfeed-delayed", typically in the
log-file, pid-file and status-file parameters. If
these parameters are not set, you should explicitly set them in
innfeed-delayed.conf so that their default values do not conflict
with a running instance in parallel of a real-time feed using
innfeed. For instance:
log-file: innfeed-delayed.log
pid-file: innfeed-delayed.pid
status-file: innfeed-delayed.status
Using the same value for backlog-directory in both
innfeed.conf and innfeed-delayed.conf is fine because the
site names in newsfeeds are unique (see below with
"news.uu.net" and
"news.uu.net-delayed").
- Possibly limit max-connections to 1.
- Only keep in innfeed-delayed.conf the configuration of the peers
which should receive a delayed feed.
- Add a new entry to newsfeeds in pathetc like:
innfeed-delayed!\
:!*\
:Tc,Wnm*,S16384:<pathbin>/delayer --delay 300 -- \
<pathbin>/innfeed -c innfeed-delayed.conf
This will delay articles via that feed for 300 seconds. If the
intent is to give NoCeM messages time to arrive, the delay should match
the frequency at which they are sent in the news.lists.filters
newsgroup.
- Use "innfeed-delayed!" instead of
"innfeed!" in the newsfeeds
entries for peers which should receive a delayed feed. If you wish, you
can also set up two entries for each peer, keeping a real-time feed
through "innfeed!" for control articles
and NoCeM messages, and delaying the feed of other articles through
"innfeed-delayed!".
news.uu.net/uunet\
:!*,control,control.*,news.lists.filters\
:Tm:innfeed!
news.uu.net-delayed/uunet\
:*,!control,!control.*,@news.lists.filters\
:Tm:innfeed-delayed!
In that case, be sure to use the same
"news.uu.net-delayed" peer name in
innfeed-delayed.conf. Note that you should only configure a
delayed feed for a remote peer if its news administrator agrees with
that (he may want a real-time feed, or already have locally implemented
a delay on his incoming feeds).
- Reload the newsfeeds configuration file:
ctlinnd reload newsfeeds 'setting delayed feeds'
- --buffered,
--no-buffered
- By default, output is buffered. This increases the time until an article
is actually sent if the number of articles is small. Disable buffering to
have a more accurate delay, at a price of a (possibly neglectable)
performance overhead.
- --delay
seconds
- Delay articles by the given amount of seconds. Default is
60.
- --store
filename
- By default, all buffered lines are written out if the input is closed,
even if the configured delay has not been reached yet.
When this flag is used, these lines will be written to the
given file instead, to be used upon next startup. Using an absolute path
name is recommended.
- --
some-other-program [args ...]
- -- separates the options to delayer from the program the
output is written to: some-other-program is the full path to the
program, optionally followed with some args parameters.
This interface is considered legacy and will be removed some
day.
- delay
- Delay articles by the given amount of seconds.
- some-other-program
[args ...]
- The full path to the program the output is written to, optionally followed
with some args parameters.
If the standard input is closed (when for instance the feed is
closed or restarted), all lines in the store are printed immediately,
breaking the contract of delaying them, unless the --store option is
used.
If the number of articles in that feed is rather low (just a few
articles per delay time or less), some effects of buffering will delay the
transmission even further. See the --no-buffering option to alleviate
this.
Initial version written in July 1998 by Christian Mock
<cm@tahina.priv.at>.
Improved and documented by Christoph Biedl in January 2024.
delay(1), innfeed.conf(5), newsfeeds(5).