EXPIRE(8)
π EXPIRE(8) β like, the Usenet article and history expiration program, bestie β¨
okay so picture this: it's expire, from the InterNetNews docs (EXPIRE(8), iykyk), and she is the girl who cleans up your news spool. let's get into it π«Ά
πΈ SYNOPSIS πΈ
expire [-iNnptx] [-d dir] [-f file] [-g file] [-h file] [-r reason] [-s
size] [-v level] [-w number] [-z file] [expire.ctl]
β¨ DESCRIPTION β¨
So expire scans the history(5)-format text file pathdb/history and uses the info recorded in it to purge itself of old news articles. Iconic behavior, honestly. But how she behaves depends on the setting of groupbaseexpiry in inn.conf. π«
When groupbaseexpiry is false, article expiration is primarily done by expire based on the expiration rules in expire.ctl that match the storage class of each article. The articles and the history entries get removed by expire, and then expireover does the additional cleanup of removing the overview database entries. History entries of expired articles are removed only if they're older than the number of days specified in the /remember/ line in expire.ctl. Articles stored using a storage method that has self-expire functionality like CNFS are by default not affected by expire's primary behavior (but see the -N flag to disable this π).
When groupbaseexpiry is true, article expiration is primarily done by expireover based on the expiration rules in expire.ctl that match each newsgroup. Articles get removed from the news spool by expireover, and then expire does some additional cleanup to remove old history database entries. teamwork, bestie π
For articles in self-expiring storage methods when groupbaseexpiry is set to false in inn.conf and the -N flag is not given, or for all articles when groupbaseexpiry is set to true, expire.ctl is ignored β except the /remember/ line. In that case expire only probes to see if the article still exists, and purges the relevant history entries if appropriate. lowkey efficient.
Regardless of the setting of groupbaseexpiry, expireover should be run along with expire, usually via news.daily out of cron. don't skip this, fr fr β°
π¨ Note thatexpirenever purges articles which do not match any entry inexpire.ctl. no match, no touch. periodt.
Also note that if groupbaseexpiry is true, the server needs an overview database in order to expire articles in storage backends that are not self-expiring. If you do not plan to have an overview database, it would then be better to only use self-expiring backends like CNFS, as the history entries will still get cleaned up by expire when it detects that an article no longer exists in that backend. π
π OPTIONS π
-ddirβ If the-dflag is used, then the new history file and database is created in the specified directorydir. Super useful when the filesystem does not have sufficient space to hold both the old and new history files. When this flag is used,expireleaves the server paused and creates a zero-length file named after the new history file, with an extension of.done, to indicate that it has successfully completed the expiration. The calling script should install the new history file and unpause the server. The-rflag should be used with this flag. π₯-ffileβ To specify an alternate history file, use the-fflag. This flag is valid when used with the-dflag, and the output will be written to the specifiedfile. The default without-fishistory.-gfileβ If the-gflag is given, then a one-line summary equivalent to the output of-v 1, except preceded by the current time, will be appended to the specifiedfile. cute little receipt π§Ύ-hfileβ To specify an alternate input text history file, use the-hflag.expireuses the old dbz database to determine the size of the new one. (If the-dflag is not used, the output filename will be the same as the input filename with an extension of.n.) The default without the-hflag ispathdb/history.-iβ To ignore the old database, use the-iflag.-Nβ The control file is normally ignored for articles in storage methods which have self-expire functionality. If the-Nflag is used,expirestill uses the control file for these articles. This parameter is only useful whengroupbaseexpiryis set to false ininn.conf. π-nβ Ifinndis not running, use the-nflag andexpirewill not send the"pause"or"go"commands. (For more details on the commands, seectlinnd(8).) Note thatexpireonly needs exclusive access for a very short time β long enough to see if any new articles arrived since it first hit the end of the file, and to rename the new files to the working files. in and out, main character energy π¨-pβexpiremakes its decisions on the time the article arrived, as found in the history file. This means articles are often kept a little longer than with other expiration programs that base their decisions on the article's posting date. To use the article's posting date, use the-pflag.-rreasonβexpirenormally sends a"pause"command to the localinnddaemon when it needs exclusive access to the history file, using the string"Expiring"as the reason. To give a different reason, use the-rflag. The process ID will be appended to the reason. Whenexpireis finished and the new history file is ready, it sends a"go"command. See also the-nflag.-ssizeβexpiredetermines the optimal size of the new history file from the size of the old one. In case you want to force a specific size, use this flag to optimize the new history database for approximatelysizekey-value pairs (i.e. lines in history). Accurately specifying the size will create a more efficient database. (Thesizeshould be the estimated eventual number of articles, typically the size of the old history file, in lines.) π-tβ If the-tflag is used, thenexpirewill generate a list of the tokens that should be removed on its standard output, and the new history file will be left inhistory.n,history.n.dir,history.n.indexandhistory.n.hash. This flag is useful for debugging when used with the-nflag. Note that if the-fflag is used, then the name specified with that flag will be used instead ofhistory. π-vlevelβ The-vflag is used to increase the verbosity of the program, generating messages to standard output. Thelevelshould be a number, where higher numbers result in more output. Level one will print totals of the various actions done (not valid if a new history file is not written), level two will print a report on each individual file, while level five results in multiple lines of output for every history line processed. she's chatty π¬-wnumberβ Use the-wflag to "warp" time so thatexpirethinks it is running at some time other than the current time. The value should be a signed floating point number indicating the number of days to use as the offset. time travel bestie π°οΈ-xβ If the-xflag is used, thenexpirewill not create any new history files. This is most useful when combined with the-nand-tflags to see how different expiration policies would change the amount of disk space used.-zfileβ If the-zflag is used, then articles are not removed, but their names are appended to the specifiedfile. See the description ofdelayrminnews.daily(8). If a filename is specified, it is taken as the control file and parsed according to the rules inexpire.ctl. A single dash ("-") may be used to read the file from standard input. If no file is specified, the filepathetc/expire.ctlis read. π
πͺ¦ TOMBSTONE LOG πͺ¦
When expiretombstone and groupbaseexpiry are enabled in inn.conf, expire consumes the per-cycle deletion log produced by expireover, innd, and sm -r (expireover.tombstone and cancels.tombstone log files in pathdb) so it can drop history entries for those articles without doing a per-article "SMretrieve(RETR_STAT)" syscall. An empty tombstone is treated as "no cancels this cycle" and the slow scan is skipped entirely. See inn.conf(5) under expiretombstone for the file lifecycle, locking model, and recovery story. spooky name, slay behavior π»β¨
π HISTORY π
Written by Rich $alz <rsalz@uunet.uu.net> for InterNetNews. Converted to POD by Julien Elie.
π SEE ALSO π
ctlinnd(8), expire.ctl(5), expireover(8), history(5), inn.conf(5), innd(8), libinn_dbz(3), libinn_inndcomm(3), news.daily(8).
okay that's the whole thing bestie!! this was EXPIRE(8) from INN 2.7.4, dated 2026-06-12 β go forth and expire responsibly, mwah ππβ¨
π¦ where this page comes from
- arch rolling: inn 2.7.4-4 Β· ISC
- epel 10: inn 2.7.4-5.el10_3 Β· ISC AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND (GPL-1.0-or-later OR Artistic-1.0-Perl) AND GPL-3.0-or-later WITH Bison-exception-2.2 AND LicenseRef-Fedora-Public-Domain AND MIT AND NTP
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms