Daemon Management¶
Tools and techniques for managing the rninja daemon.
Starting the Daemon¶
Auto-Start (Recommended)¶
Daemon starts automatically on first build:
Manual Start¶
# Background
rninja-daemon &
# Foreground (for debugging)
rninja-daemon --foreground
# With options
rninja-daemon --socket /tmp/custom.sock --max-builds 4
Stopping the Daemon¶
Graceful Stop¶
Force Stop¶
Clean Up Socket¶
After stopping, the socket file may remain:
Checking Status¶
Is Daemon Running?¶
Detailed Status¶
Socket Exists?¶
Daemon Options¶
--socket PATH¶
Custom socket location:
--max-builds N¶
Maximum concurrent builds:
--max-cached N¶
Maximum cached repositories:
--foreground¶
Don't daemonize (useful for debugging):
--verbose¶
Enable verbose logging:
Restarting¶
Graceful Restart¶
Rolling Restart (Production)¶
# Start new daemon on different socket
rninja-daemon --socket /tmp/rninja-new.sock &
# Switch clients to new socket
# Then stop old daemon
pkill -f "rninja-daemon.*old.sock"
Systemd Integration¶
Create Service File¶
/etc/systemd/system/rninja-daemon.service
[Unit]
Description=rninja Build Daemon
After=network.target
[Service]
Type=simple
User=%i
ExecStart=/usr/local/bin/rninja-daemon --foreground
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Service Commands¶
# Enable on boot
sudo systemctl enable rninja-daemon
# Start
sudo systemctl start rninja-daemon
# Stop
sudo systemctl stop rninja-daemon
# Status
sudo systemctl status rninja-daemon
# Logs
journalctl -u rninja-daemon
Per-User Service¶
Systemd User Service¶
~/.config/systemd/user/rninja-daemon.service
[Unit]
Description=rninja Build Daemon
[Service]
Type=simple
ExecStart=/usr/local/bin/rninja-daemon --foreground
Restart=on-failure
[Install]
WantedBy=default.target
Monitoring¶
Process Monitoring¶
# Watch daemon resource usage
top -p $(pgrep -f rninja-daemon)
# Or with htop
htop -p $(pgrep -f rninja-daemon)
Log Monitoring¶
# Follow daemon logs (if using systemd)
journalctl -u rninja-daemon -f
# Or daemon's stderr if foreground
rninja-daemon --foreground 2>&1 | tee daemon.log
Health Check Script¶
#!/bin/bash
# check-daemon.sh
if pgrep -f rninja-daemon > /dev/null; then
echo "Daemon is running"
exit 0
else
echo "Daemon is NOT running"
exit 1
fi
Troubleshooting¶
Daemon Won't Start¶
# Check if socket exists from dead daemon
rm /tmp/rninja-daemon.sock
# Check for port conflicts
lsof /tmp/rninja-daemon.sock
# Run foreground to see errors
rninja-daemon --foreground
Connection Refused¶
# Daemon not running or wrong socket
pgrep -fa rninja-daemon
# Check socket exists
ls -la /tmp/rninja-daemon.sock
# Restart daemon
pkill -f rninja-daemon
rninja
High Memory Usage¶
# Check memory
ps aux | grep rninja-daemon
# Restart to clear caches
pkill -f rninja-daemon
# Or limit cached repos
rninja-daemon --max-cached 5
Builds Stalling¶
# Check daemon is responsive
rninja --no-daemon # Bypass daemon
# If works, restart daemon
pkill -f rninja-daemon
rninja
Best Practices¶
- Let auto-spawn work for most cases
- Use systemd for persistent systems
- Monitor resources on build servers
- Restart periodically if memory grows
- Use custom sockets for isolation