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.
The manual pages
- Solnix: svcs(1) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: systemctl(1) systemd-260.5 (different command, similar job)
- FreeBSD: service(8) 15.1-RELEASE (different command, similar job)
- OpenBSD: rcctl(8) 8.0 (different command, similar job)
- NetBSD: service(8) 11.0 (different command, similar job)
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 with | Topic | What differs |
|---|---|---|
| all four | what is queried | svcs 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 |
| Linux | default listing | With 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, NetBSD | listing is not state reporting | FreeBSD 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 |
| OpenBSD | filtering by state | OpenBSD 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 four | explaining why a service is not running | svcs -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 |
| Linux | dependencies | svcs -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 |
| Linux | processes and logs | svcs -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 |
| Linux | output selection and sorting | svcs 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, FreeBSD | zones vs jails and containers | In 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 |
| OpenBSD | exit status | rcctl 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, NetBSD | naming | svcs 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
| Task | Solnix | Linux | FreeBSD | OpenBSD | NetBSD |
|---|---|---|---|---|---|
| list running/enabled services | svcs | systemctl list-units | service -e | rcctl ls on | service -e |
| list all services including disabled | svcs -a | systemctl list-units --all | service -r | rcctl ls all | service -l |
| list failed services | svcs -x | systemctl --failed | — | rcctl ls failed | — |
| explain why a service is not running | svcs -x FMRI | — | — | — | — |
| show status of one service | svcs -l FMRI | systemctl status unit | service script command | rcctl get daemon status | service rc_script_name status |
| show dependencies of a service | svcs -d FMRI | systemctl list-dependencies unit | — | — | — |
| show what depends on a service | svcs -D FMRI | systemctl list-dependencies --reverse unit | — | — | — |
| show a service's processes | svcs -p FMRI | systemctl 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
-Hwith-oto 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.