at(1) on Solnix vs Linux and the BSDs

On Solnix, at and batch are the illumos programs in /usr/bin. The biggest trap is -c: it selects the C shell to run the job, whereas on Linux, FreeBSD, OpenBSD and NetBSD -c prints the queued job to standard output. Solnix also has -p project, no atq/atrm pages and different queue defaults.

What Solnix runs

A default Solnix system runs the illumos /usr/bin/at, with batch alongside it. /usr/xpg4/bin/at and /usr/xpg4/bin/batch are also shipped with the same synopsis. The one documented difference is that /usr/bin/batch is equivalent to 'at -q b now', while /usr/xpg4/bin/batch is equivalent to 'at -q b -m now', so it always sends mail. The bundle does not document any other xpg4 difference.

Differences

Compared withTopicWhat differs
all four-c meaningSolnix at -c runs the job under csh(1). On Linux, FreeBSD, OpenBSD and NetBSD, -c job prints the listed jobs to standard output. A script that uses at -c to inspect a job will instead try to submit a job under csh on Solnix.
Source: Solnix at(1) -c; Linux at(1) -c; FreeBSD at(1) -c; OpenBSD at(1) -c; NetBSD at(1) -c
all fourshell that runs the jobSolnix uses -c, -k or -s to pick csh, ksh or sh. Without them it uses SHELL, or /usr/bin/sh if SHELL is unset or empty. Linux, FreeBSD and NetBSD say the job runs with sh. OpenBSD uses SHELL, then the password database shell, then sh.
Source: Solnix at(1) OPTIONS; Linux at(1) DESCRIPTION; FreeBSD at(1) DESCRIPTION; NetBSD at(1) DESCRIPTION; OpenBSD at(1) DESCRIPTION
all fourdefault queuesOn Solnix, at jobs go to queue a and batch to queue b. Queue c is reserved for cron and cannot be used with -q. Only lowercase a to z are valid. FreeBSD, OpenBSD and NetBSD default to c for at and E for batch, and accept A to Z, where an uppercase queue means batch. Linux defaults to a and b.
Source: Solnix at(1) -q; FreeBSD at(1) -q; OpenBSD at(1) -q; NetBSD at(1) -q; Linux at(1) -q
OpenBSDOpenBSD page contradicts itself on queuesThe OpenBSD OPTIONS text says c is the default queue for at and E for batch. Its STANDARDS section says at jobs go in queue a and batch jobs in queue b. The manual does not reconcile the two.
Source: OpenBSD at(1) -q; OpenBSD at(1) STANDARDS
all fouraccess control filesSolnix reads /usr/lib/cron/at.allow and at.deny. If neither exists, only a user with the solaris.jobs.user authorization may submit jobs. Linux uses /etc/at/, FreeBSD and NetBSD use /var/at/, and OpenBSD uses /var/cron/. FreeBSD, NetBSD and OpenBSD allow only the superuser when neither file exists.
Source: Solnix at(1) DESCRIPTION; Linux at(1) DESCRIPTION; FreeBSD at(1) DESCRIPTION; NetBSD at(1) DESCRIPTION; OpenBSD at(1) DESCRIPTION
OpenBSD, NetBSDempty at.denyOn Solnix, an empty at.deny permits global use, but only when at.allow does not exist and at.deny does. OpenBSD and NetBSD also say an empty at.deny means every user may use at, and give it as the default configuration. Solnix gives no default.
Source: Solnix at(1) DESCRIPTION; OpenBSD at(1) DESCRIPTION; NetBSD at(1) DESCRIPTION
Linux, FreeBSD, NetBSDatq, atrm and -dThe Solnix page lists no atq or atrm. Use at -l to list and at -r to remove. Linux, FreeBSD and NetBSD document atq and atrm, and -d as an alias for atrm. Solnix has no -d. NetBSD makes -l and -r aliases for atq and atrm.
Source: Solnix at(1) SYNOPSIS, -l, -r; Linux at(1) SYNOPSIS, -d; FreeBSD at(1) SYNOPSIS, -d; NetBSD at(1) SYNOPSIS, -d, -l, -r
all fourbatch invocation and load ruleSolnix batch accepts only -p project and reads standard input. It submits to queue b for immediate execution, delayed only by concurrent-job limits in queuedefs(5). The other systems document a load-average threshold (Linux 0.8, FreeBSD 1.5 times active CPUs, OpenBSD and NetBSD 1.5). Their batch takes a time or timespec, and -f and -q.
Source: Solnix at(1) batch; Linux at(1) batch; FreeBSD at(1) batch; OpenBSD at(1) SYNOPSIS; NetBSD at(1) SYNOPSIS
all four-p projectSolnix at and batch take -p project to run the job under a project, and to filter -l output. None of the Linux, FreeBSD, OpenBSD or NetBSD pages documents -p.
Source: Solnix at(1) SYNOPSIS, -p; Linux at(1) OPTIONS; FreeBSD at(1) OPTIONS; OpenBSD at(1) OPTIONS; NetBSD at(1) OPTIONS
Linux, FreeBSD, NetBSD-v and -VSolnix has neither -v nor -V. Linux, FreeBSD and NetBSD have -v, which shows the execution time (for atq on FreeBSD and NetBSD, also completed but undeleted jobs). Linux and NetBSD have -V, which prints the version. OpenBSD has neither.
Source: Solnix at(1) SYNOPSIS; Linux at(1) -v, -V; FreeBSD at(1) -v; NetBSD at(1) -v, -V
LinuxLinux-only mail and listing optionsLinux at has -M (never send mail), -u username (mail someone else) and -o fmt (job list time format). The Solnix page documents none of these.
Source: Linux at(1) -M, -u, -o; Solnix at(1) SYNOPSIS
all fourjob environment and locked accountsSolnix keeps the environment, working directory, umask and, for sh and ksh, resource limits. It runs the job in a separate process group with no controlling terminal, and skips jobs of locked accounts. The other pages list excluded variables, which the Solnix page does not.
Source: Solnix at(1) DESCRIPTION; Linux at(1) DESCRIPTION; FreeBSD at(1) DESCRIPTION; OpenBSD at(1) DESCRIPTION; NetBSD at(1) DESCRIPTION
FreeBSDscheduling granularityFreeBSD implements at through cron(8) calling atrun(8) every five minutes, so timing may be coarse. The Solnix page describes no such interval.
Source: FreeBSD at(1) IMPLEMENTATION NOTES; Solnix at(1) DESCRIPTION

Standards

  • POSIX: at is a POSIX.1-2024 utility.
  • NetBSD: The at and batch utilities conform to IEEE Std 1003.2-1992 (“POSIX.2”).
  • OpenBSD: The at and batch utilities are compliant with the specification (name elided in the text). The at flags -b and -c and the teatime timespec are extensions. The at.allow/deny mechanism is marked as an X/Open System Interfaces option.
  • Linux: The page says its time specifications extend the POSIX.2 standard.

Writing portable scripts

  • Do not use -c, -k, -s, -d, -v or -p in portable scripts: they differ between systems or exist on only some. Set the shell inside the job script, and use at -l and at -r for listing and removal.
  • Use -t [[CC]YY]MMDDhhmm[.SS] (touch-style) or plain HH:MM times and avoid teatime, 'next' and other extensions. Do not rely on a default queue name.

Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.