Runlevels & Targets

Managing system states using runlevels and systemd targets for different operational modes

Runlevels and systemd targets define different operating states of a Linux system. Runlevels (used by SysV init) and targets (used by systemd) determine which services and processes should be running at any given time, allowing administrators to control system behavior for different scenarios.

Key Concepts

  • Runlevel: Numerical system state (0-6) defining which services run
  • Target: systemd’s replacement for runlevels, more flexible
  • Init System: Process that manages system startup and service control
  • Default Target: The target system boots into by default
  • Service Dependencies: How services rely on each other

Traditional Runlevels (SysV Init)

  • 0: Halt/shutdown
  • 1: Single-user mode (rescue/maintenance)
  • 2: Multi-user without network
  • 3: Multi-user with network (text mode)
  • 4: Unused (custom)
  • 5: Multi-user with GUI
  • 6: Reboot

Systemd Targets

  • poweroff.target: Equivalent to runlevel 0
  • rescue.target: Equivalent to runlevel 1
  • multi-user.target: Equivalent to runlevel 3
  • graphical.target: Equivalent to runlevel 5
  • reboot.target: Equivalent to runlevel 6

Command Syntax

SysV Commands

runlevel - Show current and previous runlevel init [runlevel] - Change to specified runlevel telinit [runlevel] - Alternative to init

Systemd Commands

systemctl get-default - Show default target systemctl set-default [target] - Set default target systemctl isolate [target] - Switch to target immediately

Practical Examples

Example 1: Check current runlevel/target

1
2
3
4
5
6
7
# Traditional systems
runlevel
N 3

# Systemd systems
systemctl get-default
graphical.target

Shows current system state

Example 2: Change runlevel/target

1
2
3
4
5
# Switch to single-user mode (SysV)
sudo init 1

# Switch to rescue mode (systemd)
sudo systemctl isolate rescue.target

Immediately changes system state

Example 3: Set default target

1
2
3
4
5
# Set text mode as default
sudo systemctl set-default multi-user.target

# Set GUI mode as default
sudo systemctl set-default graphical.target

Changes what system boots into

Example 4: List available targets

1
2
systemctl list-units --type=target
systemctl list-units --type=target --all

Shows all targets and their current state

Use Cases

  • System maintenance: Boot to single-user mode
  • Server optimization: Run text-mode only
  • Troubleshooting: Switch targets to isolate issues
  • Resource management: Control which services run
  • Recovery operations: Access system when GUI fails

systemctl status - Check service and system status systemctl list-dependencies - Show target dependencies who -r - Display current runlevel info systemctl rescue - Quick switch to rescue mode systemctl emergency - Switch to emergency mode

Tips & Troubleshooting

Common Issues

  • GUI won’t start: Check if graphical.target is set

    1
    
    systemctl status graphical.target
    
  • Services not starting: Verify target dependencies

    1
    
    systemctl list-dependencies multi-user.target
    

Recovery Tips

  • Boot to rescue mode: Add systemd.unit=rescue.target to kernel parameters
  • Emergency access: Use systemd.unit=emergency.target
  • Reset to defaults:
    1
    
    sudo systemctl set-default graphical.target
    

Best Practices

  • Always use systemctl isolate instead of direct target switching
  • Check service dependencies before changing targets
  • Test target changes before setting as default
  • Keep rescue media available for emergency access