svcs(1) on Solnix vs Linux and the BSDs

svcs is the illumos command at /usr/bin/svcs. It reports the state of SMF service instances from the service configuration repository. It is read-only and has no Linux or BSD equivalent by name. systemctl, FreeBSD and NetBSD service, and OpenBSD rcctl cover the same questions with different models.

What Solnix runs

A default Solnix system runs the illumos svcs at /usr/bin/svcs, published in pkgs.solnix.illumos-world-man. No other variants are shipped. svcs only reports. To change service state use svcadm(8), and svcs output can be used as svcadm input.

Differences

Compared withTopicWhat differs
all fourwhat is queriedsvcs reads service instances from the SMF configuration repository. systemctl introspects systemd units. FreeBSD and NetBSD service and OpenBSD rcctl work from rc.d scripts and rc.conf-style settings.
Source: Solnix svcs(1) DESCRIPTION; Linux systemctl(1) DESCRIPTION; FreeBSD service(8) DESCRIPTION; NetBSD service(8) DESCRIPTION; OpenBSD rcctl(8) DESCRIPTION
Linuxdefault listingWith no arguments svcs lists enabled instances, even ones temporarily disabled. svcs -a adds disabled ones. On Linux, list-units shows inactive units only with -a/--all.
Source: Solnix svcs(1) DESCRIPTION, -a; Linux systemctl(1) -a, --all
FreeBSD, NetBSDlisting is not state reportingFreeBSD and NetBSD service -e lists enabled rc.d scripts and -l lists script files. Neither shows running state. svcs prints a state column per instance. Per-service status on the BSDs depends on the script's own action.
Source: FreeBSD service(8) -e, -l; NetBSD service(8) -e, -l, ENVIRONMENT; Solnix svcs(1) -v
OpenBSDfiltering by stateOpenBSD rcctl ls takes one of all, failed, off, on, rogue, started or stopped. svcs has no such keyword list. Its page offers -a, -x, -R, and sorting with -s/-S, and the page text shown does not describe a state filter.
Source: OpenBSD rcctl(8) ls; Solnix svcs(1) SYNOPSIS, -a, -x, -R, -s, -S
all fourexplaining why a service is not runningsvcs -x prints human-readable text on why an instance is in its state. With no arguments it covers enabled services that are not running and services blocking another enabled service. The counterpart pages show no equivalent single option.
Source: Solnix svcs(1) DESCRIPTION (fourth form), -x
Linuxdependenciessvcs -d lists what the given instances depend on and svcs -D lists what depends on them. systemctl uses its list-dependencies command, with --reverse for the opposite direction.
Source: Solnix svcs(1) -d, -D; Linux systemctl(1) --reverse, --after, --before
Linuxprocesses and logssvcs -p lists each instance's processes (PID, STIME, CMD from ps(1)). svcs -L prints the log file name. The systemctl text in the bundle describes journal output only under status.
Source: Solnix svcs(1) -p, -L; Linux systemctl(1) -l, --full, -a
Linuxoutput selection and sortingsvcs chooses columns with -o and sorts with -s or -S, and -H drops the header. systemctl text in the bundle has -p/--property and -P for show, and --state= and -t for filtering. These are not the same options.
Source: Solnix svcs(1) -o, -s, -S, -H; Linux systemctl(1) -p, -P, --state, -t
Linux, FreeBSDzones vs jails and containersIn the global zone, svcs -z zone shows one zone and -Z shows all zones with an extra column. Both are global-zone only. FreeBSD service takes -j jail. systemctl -r also lists units of local containers, prefixed with the container name.
Source: Solnix svcs(1) -z, -Z; FreeBSD service(8) -j; Linux systemctl(1) -r, --recursive
OpenBSDexit statusrcctl ls failed and ls rogue exit 1 if an enabled daemon is not running or vice versa, and rcctl get exits 0 or 1 by enabled state. The trimmed Solnix svcs page text shown does not give an exit status table, so scripts should not assume the same.
Source: OpenBSD rcctl(8) EXIT STATUS; Solnix svcs(1) (EXIT STATUS not in bundle text)
FreeBSD, NetBSDnamingsvcs takes FMRIs or patterns, and abbreviations like sendmail or smtp:sendmail. NetBSD service takes script names without a path prefix.
Source: Solnix svcs(1) OPERANDS; NetBSD service(8) -e

Everyday tasks

TaskSolnixLinuxFreeBSDOpenBSDNetBSD
list running/enabled servicessvcssystemctl list-unitsservice -ercctl ls onservice -e
list all services including disabledsvcs -asystemctl list-units --allservice -rrcctl ls allservice -l
list failed servicessvcs -xsystemctl --failed—rcctl ls failed—
explain why a service is not runningsvcs -x FMRI————
show status of one servicesvcs -l FMRIsystemctl status unitservice script commandrcctl get daemon statusservice rc_script_name status
show dependencies of a servicesvcs -d FMRIsystemctl list-dependencies unit———
show what depends on a servicesvcs -D FMRIsystemctl list-dependencies --reverse unit———
show a service's processessvcs -p FMRIsystemctl status unit———

Standards

  • POSIX: svcs is not a POSIX.1-2024 utility.

Writing portable scripts

  • Do not write one script across these systems on the assumption that a listing command exists everywhere. Branch on which tool is present: svcs, systemctl, rcctl or service.
  • On Solnix, use svcs -H with -o to get headerless columns for parsing, and feed the result to svcadm.

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.