systemctl: command not found almost always means you are on a system that does not use systemd — a container, Alpine Linux, or an older init like SysVinit or OpenRC. The fix is not to install systemctl; it is to use the init system the machine actually has.
First, find out what init you have
cat /proc/1/comm # prints: systemd, init, busybox, ...
ps -p 1 -o comm=systemd— systemctl should exist; skip to the PATH check below.busyboxoropenrc— you are on Alpine; userc-service.init— SysVinit; useserviceandupdate-rc.d.
Alpine (OpenRC)
rc-service nginx start
rc-service nginx status
rc-update add nginx default # enable at bootSysVinit
service nginx start
service nginx status
update-rc.d nginx enableIn a Docker container
Containers have no init by design — PID 1 is your application, not systemd. Do not try to run systemctl inside one. Start processes directly, or run one service per container as intended:
# instead of: systemctl start nginx
nginx -g 'daemon off;'If you do have systemd but the command is missing
On a systemd machine the binary lives in /usr/bin or /bin. A stripped PATH (common under su without -) hides it:
ls -l /usr/bin/systemctl /bin/systemctl 2>/dev/null
/usr/bin/systemctl status
su - # the dash loads a full login PATHA full KVM VPS runs a normal systemd userland, so service management works exactly as the documentation expects. Our Standard KVM line ships stock systemd images of Debian, Ubuntu, Rocky and more.
Frequently asked
How do I install systemctl?
You generally do not. It ships with systemd; if the system uses another init (OpenRC on Alpine, SysVinit), use that init's tools rather than forcing systemd in.
Why is systemctl missing inside my Docker container?
Containers have no init by design — PID 1 is your application. Start processes directly (e.g. 'nginx -g "daemon off;"') instead of using systemctl.
What replaces systemctl on Alpine?
OpenRC: use 'rc-service <name> start' and 'rc-update add <name> default' to enable at boot.