Step-by-Step Diagnostic Process
Step 1: Get Detailed Error
sudo systemctl status servicename
sudo journalctl -u servicename -e --no-pager
sudo journalctl -u servicename --since "1 hour ago"
Step 2: Check Common Issues
Based on error messages:
# Permission issues
sudo chmod +x /path/to/executable
sudo chown -R serviceuser:serviceuser /var/lib/servicename
# Config syntax errors
servicename -t # For services with config test
nginx -t
apache2ctl configtest
# Port conflicts
sudo netstat -tlnp | grep LISTEN
# Missing directories
sudo mkdir -p /var/run/servicename
sudo mkdir -p /var/log/servicename
Step 3: Start with Debugging Flags
# Temporarily run service manually
sudo -u serviceuser /usr/sbin/servicename --debug
Step 4: Check Dependencies
# Services that need network, database, etc.
systemctl list-dependencies servicename
# Start required services first
sudo systemctl start mysql
sudo systemctl start servicename
Step 5: Increase Timeout for Slow Services
sudo systemctl edit servicename
[Service]
TimeoutStartSec=300
Restart=on-failure
RestartSec=30
Step 6: Complete Service Reset
sudo systemctl stop servicename
sudo systemctl disable servicename
sudo apt install --reinstall servicename -y
sudo rm -rf /var/lib/servicename # WARNING: removes data!
sudo systemctl enable servicename --now
Step 7: Check System Resources
df -h
free -h
ulimit -n # File descriptor limit
💡 Always check service logs first - they contain the exact reason!