OpenRC

Alpine Linux uses openrc for its init system. The init system manages the services, startup and shutdown of your computer. 
Refer to the excellent guide working with OpenRC from Alpine Linux documentation project to learn the basics quickly. Refer Writing Init Scripts and Multiple instances of services pages for more advanced information.
== Quickstart ==
Action 	Command 	Remarks
Managing a service - start,stop and restart 	Managing a service - start,stop and restart 	Managing a service - start,stop and restart
Start <serviceName> now 	 	
Stop <serviceName> now 	 	
Restart <serviceName> now 	 	
Adding and removing service from runlevels 	Adding and removing service from runlevels 	Adding and removing service from runlevels
Add <serviceName> to <runlevel> 	 	
Remove <serviceName> from <runlevel> 	 	
Check services in a runlevel and their status 	Check services in a runlevel and their status	Check services in a runlevel and their status
To check status of <serviceName> 	 	
To view services configured at <runlevel> 	 	
To view currently active runlevels and state of services	 	
Check and manage runlevels 	Check and manage runlevels 	Check and manage runlevels
To view available runlevels 	 	
To change to a different <runlevel> 	 	
To add as a stacked <runlevel> 	 	
== Runlevels ==
A runlevel is basically a collection of services that needs to be started. Instead of random numbers they are named, and users can create their own if needed. The default startup uses the runlevels sysinit, boot, and default, in that order. Shutdown uses the shutdown runlevel.
The available runlevels are:
* default - Used if no runlevel is specified. (This is generally the runlevel you want to add services to.)
* hotplugged
* manual
The special runlevels are:
* sysinit - Brings up system specific stuff such as /dev, /proc and optionally /sys for Linux based systems. It also mounts /lib/rc/init.d as a ramdisk using tmpfs where available unless / is mounted rw at boot. rc uses /lib/rc/init.d to hold state information about the services it runs. sysinit always runs when the host first starts and should not be run again.
* boot - Generally the only services you should add to the boot runlevel are those which deal with the mounting of filesystems, set the initial state of attached peripherals and logging. Hotplugged services are added to the boot runlevel by the system. All services in the boot and sysinit runlevels are automatically included in all other runlevels except for those listed here.
* single - Stops all services except for those in the sysinit runlevel.
* reboot - Changes to the shutdown runlevel and then reboots the host.
* shutdown - Changes to the shutdown runlevel and then halts the host.
=== Stacked runlevels ===
Runlevel "inheritance" is acheived through runlevel stacking. For more detailed information, refer Gentoo wiki.
== Preventing slow services from delaying boot ==
Services that take a while to start will block the boot process until they complete. E.g.: iwd and networking might delay startup of an interactive system rather than start in the background.
This can be remedied as per Patrycja's blog post titled OpenRC: Start services after login prompt. This solution makes use of stacked runlevels. 
* Create a custom runlevel (name is “async” here, but it doesn’t matter) 
* Add default as a stacked runlevel 
* Remove slow services from default and add them to async 
* Add changing of runlevel to async by adding the line ::once:/sbin/openrc async to file as follows: 
After rebooting, services from async will start separately. This change does not affect other services that start from Default runlevel and they may still block agetty from running due to the wait label.
== cgroups v2 ==
Since 0.51 cgroups v2, or "unified", is the default.
You can enable hybrid cgroups v1 & v2 by editing /etc/rc.conf and setting rc_cgroup_mode="hybrid".
Then you should run 
to take effect and 
to auto mount the cgroup filesystem on boot.
== User services ==
OpenRC supports managing services for users.
The XDG_RUNTIME_DIR variable must be set before calling openrc --user, as it's used to store state for openrc itself and the services it runs.
== Command usage ==
 Usage: rc-update [options] add <service> [<runlevel>...]
 or: rc-update [options] del <service> [<runlevel>...]
 or: rc-update [options] [show [<runlevel>...]]
 Options: [ asuChqVv ]
 -a, --all Process all runlevels
 -s, --stack Stack a runlevel instead of a service
 -u, --update Force an update of the dependency tree
 -h, --help Display this help output
 -C, --nocolor Disable color output
 -V, --version Display software version
 -v, --verbose Run verbosely
 -q, --quiet Run quietly (repeat to suppress errors)
 Usage: rc-status [options] [-f ini] <runlevel>...
 or: rc-status [options] [-f ini] [-a | -c | -l | -m | -r | -s | -u]
 Options: [ acf:lmrsSuChqVv ]
 -a, --all Show services from all run levels
 -c, --crashed Show crashed services
 -f, --format <arg> format status to be parsable (currently arg must be ini)
 -l, --list Show list of run levels
 -m, --manual Show manually started services
 -r, --runlevel Show the name of the current runlevel
 -s, --servicelist Show service list
 -S, --supervised show supervised services
 -u, --unused Show services not assigned to any runlevel
 -h, --help Display this help output
 -C, --nocolor Disable color output
 -V, --version Display software version
 -v, --verbose Run verbosely
 -q, --quiet Run quietly (repeat to suppress errors)
 Usage: rc-service [options] [-i] <service> <cmd>...
 or: rc-service [options] -e <service>
 or: rc-service [options] -l
 or: rc-service [options] -r <service>
 Options: [ cdDe:ilr:INsSZChqVv ]
 -d, --debug set xtrace when running the command
 -D, --nodeps ignore dependencies
 -e, --exists <arg> tests if the service exists or not
 -c, --ifcrashed if the service is crashed run the command
 -i, --ifexists if the service exists run the command
 -I, --ifinactive if the service is inactive run the command
 -N, --ifnotstarted if the service is not started run the command
 -s, --ifstarted if the service is started run the command
 -S, --ifstopped if the service is stopped run the command
 -l, --list list all available services
 -r, --resolve <arg> resolve the service name to an init script
 -Z, --dry-run dry run (show what would happen)
 -h, --help Display this help output
 -C, --nocolor Disable color output
 -V, --version Display software version
 -v, --verbose Run verbosely
 -q, --quiet Run quietly (repeat to suppress errors)
 Usage: openrc [options] [<runlevel>]
 Options: [ a:no:s:SChqVv ]
 -n, --no-stop do not stop any services
 -o, --override <arg> override the next runlevel to change into
 when leaving single user or boot runlevels
 -s, --service <arg> runs the service specified with the rest
 of the arguments
 -S, --sys output the RC system type, if any
 -h, --help Display this help output
 -C, --nocolor Disable color output
 -V, --version Display software version
 -v, --verbose Run verbosely
 -q, --quiet Run quietly (repeat to suppress errors) 
 Reboot/Halt/Poweroff: (And their equivalent from traditional GNU/Linux systems):
== See also ==
* Writing Init Scripts
* Multiple Instances of Services
* OpenRC user Guide
* OpenRC Service Script Writing Guide
* Gentoo Wiki
* ArchWiki
* PostmarketOS Wiki
* Start services after login prompt
Category:Booting 
Category:System Administration
Category:Services