The update-rc.d command is a powerful utility in Debian-based Linux distributions that manages the symbolic links for System V init scripts. This tool allows system administrators to install and remove services that should start or stop at specific run levels during the boot process.
What is update-rc.d Command?
The update-rc.d command is specifically designed for Debian and Ubuntu systems to manage init script links in the /etc/rc*.d/ directories. It provides a standardized way to control which services start automatically during system boot and at different run levels.
- Install and remove system services
- Configure service start/stop priorities
- Manage run level associations
- Handle service dependencies
Basic Syntax and Options
The basic syntax of the update-rc.d command follows this pattern:
update-rc.d [options] service_name action [arguments]
Common Options
| Option | Description |
|---|---|
-n |
Dry run – show what would be done without executing |
-f |
Force removal even if script exists |
-h |
Display help information |
Understanding Run Levels
Before diving into examples, it’s crucial to understand Linux run levels:
| Run Level | Description |
|---|---|
| 0 | System halt/shutdown |
| 1 | Single-user mode |
| 2-5 | Multi-user modes |
| 6 | System reboot |
Installing Services with update-rc.d
Basic Service Installation
To install a service with default start and stop links:
sudo update-rc.d apache2 defaults
Expected Output:
update-rc.d: using dependency based boot sequencing
insserv: warning: script 'K01apache2' missing LSB tags and overrides
insserv: warning: script 'apache2' missing LSB tags and overrides
Custom Priority Installation
Install a service with specific start and stop priorities:
sudo update-rc.d myservice start 20 2 3 4 5 . stop 80 0 1 6 .
This command creates:
- Start links with priority 20 in run levels 2, 3, 4, and 5
- Stop links with priority 80 in run levels 0, 1, and 6
Removing Services
Basic Service Removal
To remove all links for a service:
sudo update-rc.d apache2 remove
Expected Output:
update-rc.d: using dependency based boot sequencing
insserv: warning: current start runlevel(s) (empty) of script `apache2' overrides LSB header.
Force Removal
Force remove a service even if the script still exists:
sudo update-rc.d -f apache2 remove
Practical Examples and Use Cases
Example 1: Managing a Custom Service
Let’s create and manage a custom service called “myapp”:
# Create the service script
sudo nano /etc/init.d/myapp
# Make it executable
sudo chmod +x /etc/init.d/myapp
# Install the service
sudo update-rc.d myapp defaults
Example 2: Disabling a Service Temporarily
To disable a service without removing the script:
sudo update-rc.d mysql disable
To re-enable it later:
sudo update-rc.d mysql enable
Example 3: Checking Current Service Status
View current service links in the system:
# List all services
ls -la /etc/rc*.d/ | grep apache2
# Check specific run level
ls -la /etc/rc2.d/ | grep apache2
Advanced Configuration Options
Using LSB Headers
Modern init scripts should include LSB (Linux Standard Base) headers for proper dependency management:
#!/bin/bash
### BEGIN INIT INFO
# Provides: myservice
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: My custom service
# Description: Detailed description of my service
### END INIT INFO
Dependency-Based Boot Sequencing
When using LSB headers, update-rc.d automatically handles dependencies:
sudo update-rc.d myservice defaults
The system will automatically determine the correct start/stop sequence based on dependencies.
Troubleshooting Common Issues
Issue 1: Missing LSB Tags Warning
Problem: Warning about missing LSB tags
Solution: Add proper LSB headers to your init script or use the -f option
Issue 2: Service Not Starting
Check if the service is properly installed:
# Verify links exist
ls -la /etc/rc*.d/*myservice*
# Test the script manually
sudo /etc/init.d/myservice start
Issue 3: Permission Denied Errors
Ensure proper permissions on the init script:
sudo chmod 755 /etc/init.d/myservice
sudo chown root:root /etc/init.d/myservice
Best Practices and Security Considerations
- Always run update-rc.d with sudo privileges
- Validate init scripts before installation
- Use LSB headers for proper dependency management
- Test services in non-production environments first
- Keep backup of working configurations
Alternative Tools and Modern Alternatives
While update-rc.d is still widely used, modern systems often employ alternatives:
systemctl (systemd)
# Modern equivalent for systemd systems
sudo systemctl enable myservice
sudo systemctl disable myservice
service Command
# Generic service management
sudo service apache2 start
sudo service apache2 stop
Conclusion
The update-rc.d command remains an essential tool for managing system services in Debian-based Linux distributions. Understanding its functionality allows system administrators to properly configure service startup behavior, manage dependencies, and maintain system stability.
Whether you’re installing custom applications, managing web servers, or configuring database services, mastering update-rc.d provides the foundation for effective Linux system administration. Remember to always test configurations in safe environments and maintain proper documentation of your service configurations.
As Linux systems continue to evolve, while systemd becomes more prevalent, the principles and knowledge gained from understanding update-rc.d remain valuable for maintaining legacy systems and understanding the evolution of Linux service management.
- What is update-rc.d Command?
- Basic Syntax and Options
- Understanding Run Levels
- Installing Services with update-rc.d
- Removing Services
- Practical Examples and Use Cases
- Advanced Configuration Options
- Troubleshooting Common Issues
- Best Practices and Security Considerations
- Alternative Tools and Modern Alternatives
- Conclusion








