svcadm(8) on Solnix vs Linux and the BSDs

svcadm is the illumos command at /usr/sbin/svcadm that asks the service management facility (SMF) to act on service instances named by FMRI. The service's restarter, svc.startd by default, carries out the request. You enable a service with a svcadm subcommand; the page names no rc.conf-style file to edit, unlike FreeBSD sysrc or OpenBSD rcctl.

What Solnix runs

A default Solnix system runs the illumos svcadm at /usr/sbin/svcadm. No other variants are shipped. To list services and their states, see svcs(1). svcadm only changes them.

Differences

Compared withTopicWhat differs
all fourservice modelsvcadm sends requests to SMF, and each service's assigned restarter (default svc.startd) performs them. systemctl controls systemd units. FreeBSD and NetBSD service, and OpenBSD rcctl, run rc.d(8) scripts.
Source: Solnix svcadm(8) DESCRIPTION; Linux systemctl(1) DESCRIPTION; FreeBSD service(8) DESCRIPTION; NetBSD service(8) DESCRIPTION; OpenBSD rcctl(8) DESCRIPTION
FreeBSD, OpenBSDwhere boot-time enablement livesFreeBSD records enablement in rc.conf(5) files (by default /etc/rc.conf /etc/rc.conf.local), edited with sysrc. OpenBSD rcctl enable writes rc.conf.local(8). The svcadm page names no configuration file: you run svcadm enable or disable on the FMRI.
Source: FreeBSD sysrc(8) DESCRIPTION (rc_conf_files); OpenBSD rcctl(8) enable, set; Solnix svcadm(8) SYNOPSIS
Linux, OpenBSDfailed services and maintenanceOn Solnix, a service whose start method hangs moves to the maintenance state when its method timeout expires, and cannot come online without administrator intervention. Linux lists failed units with --failed or --state=failed. OpenBSD uses rcctl ls failed.
Source: Solnix svcadm(8) NOTES; Linux systemctl(1) --state; OpenBSD rcctl(8) ls
Linuxselecting by statesvcadm -S state applies the subcommand to every FMRI in that state. systemctl --state= only filters what list-units, list-dependencies, show and status display.
Source: Solnix svcadm(8) -S; Linux systemctl(1) --state
all fourexit status 3 and 4svcadm exits 3 when an instance it waited for cannot reach the desired state because of a problem with the instance itself, and 4 when the problem is in its dependencies. 2 means invalid options.
Source: Solnix svcadm(8) EXIT STATUS
FreeBSD, OpenBSD, NetBSDBSD exit statusOpenBSD rcctl action returns the rc.d script's exit status, and 2 means a non-existent daemon. NetBSD service exits 1 when the script does not exist. FreeBSD service documents only 0 or >0.
Source: OpenBSD rcctl(8) EXIT STATUS; NetBSD service(8) EXIT STATUS; FreeBSD service(8) EXIT STATUS
Linux, FreeBSDzones, jails, containersFrom the global zone, svcadm -z zone acts on services in one zone and -Z acts on all zones. FreeBSD service and sysrc take -j jail. systemctl -r/--recursive also lists units of local containers.
Source: Solnix svcadm(8) -z, -Z; FreeBSD service(8) -j; FreeBSD sysrc(8) -j; Linux systemctl(1) -r
FreeBSD, NetBSDenvironment of started servicesFreeBSD and NetBSD service run rc.d scripts with HOME=/ and PATH=/sbin:/bin:/usr/sbin:/usr/bin; NetBSD also sets umask 022. The svcadm page does not describe the environment, because the restarter starts the service.
Source: FreeBSD service(8) ENVIRONMENT; NetBSD service(8) ENVIRONMENT; Solnix svcadm(8) DESCRIPTION
FreeBSD, OpenBSD, NetBSDnaming servicessvcadm takes FMRIs or FMRI patterns. The BSD tools take an rc.d script or daemon name with no path prefix.
Source: Solnix svcadm(8) SYNOPSIS; NetBSD service(8) -e; OpenBSD rcctl(8) SYNOPSIS; FreeBSD service(8) SYNOPSIS

Everyday tasks

TaskSolnixLinuxFreeBSDOpenBSDNetBSD
enable a servicesvcadm enable FMRI—sysrc name=value (rc.conf variable)rcctl enable daemon—
disable a servicesvcadm disable FMRI—sysrc name=value (rc.conf variable)rcctl disable daemon—
start or stop a service now——service script start | stoprcctl start | stop daemonservice rc_script_name start
restart a servicesvcadm restart FMRI——rcctl restart daemonservice rc_script_name restart
check whether a service is enabledsee svcs(1)systemctl is-enabled unitservice -ercctl get daemon statusservice -e rc_script_name
show a service's statussee svcs(1)systemctl status unit——service rc_script_name status
list failed servicessee svcs(1)systemctl list-units --state=failed—rcctl ls failed—
list all servicessee svcs(1)systemctl list-units --allservice -lrcctl ls allservice -l

Standards

  • POSIX: svcadm is not a POSIX.1-2024 utility.
  • Solnix: Interface Stability: the interactive output is Uncommitted; the invocation and non-interactive output are Committed.

Writing portable scripts

  • Branch on the tool that is present (svcadm, systemctl, rcctl, service/sysrc) instead of assuming one. Enablement is SMF state on Solnix, rc.conf files on FreeBSD and OpenBSD, and units on Linux.
  • Check exit status, not output: svcadm's non-interactive output is Committed, but its interactive output is Uncommitted.

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.