How to Check Gunicorn Logs and Monitor Your Django App as a Systemd Service
Sospeter Mong'are

Sospeter Mong'are @msnmongare

About: Software Engineer passionate about developing for the web

Location:
Kenya
Joined:
Nov 22, 2018

How to Check Gunicorn Logs and Monitor Your Django App as a Systemd Service

Publish Date: Jun 2
1 0

When deploying a Django application using Gunicorn and systemd, checking logs and ensuring everything is running smoothly is essential. Whether you're troubleshooting errors or simply validating a successful deployment, this guide walks you through how to manage and monitor your Gunicorn process on a Linux server.


1. Check Gunicorn Logs Using journalctl

If your Gunicorn is running under a systemd service (e.g., tunaresq_be.service), the easiest way to view logs is with journalctl.

View Recent Logs

sudo journalctl -u tunaresq_be.service -e
Enter fullscreen mode Exit fullscreen mode
  • -u tunaresq_be.service: Filters logs for your service.
  • -e: Jumps to the latest entries.

Follow Logs in Real Time

sudo journalctl -u tunaresq_be.service -f
Enter fullscreen mode Exit fullscreen mode

This works like tail -f and is useful for watching logs live while restarting services or testing requests.


2. Check Gunicorn Service Status

You can get a summary of the service status and any recent failures using:

sudo systemctl status tunaresq_be
Enter fullscreen mode Exit fullscreen mode

This will show:

  • Whether the service is active
  • The main PID
  • Recent error or info messages

3. Enable Gunicorn File Logging (Optional)

If you want to keep dedicated access and error logs (besides what systemd collects), you can modify your tunaresq_be.service file to include log files.

Example Service File: /etc/systemd/system/tunaresq_be.service

[Unit]
Description=Gunicorn daemon for tunaresq-be
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/tunaresq_be
ExecStart=/var/www/tunaresq_be/venv/bin/gunicorn \
  --access-logfile /var/www/tunaresq_be/logs/access.log \
  --error-logfile /var/www/tunaresq_be/logs/error.log \
  --workers 3 \
  --bind unix:/var/www/tunaresq_be/tunaresq_be.sock \
  tunaresq_be.wsgi:application

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Create the Logs Directory

sudo mkdir -p /var/www/tunaresq_be/logs
sudo chown -R $USER:$USER /var/www/tunaresq_be/logs
Enter fullscreen mode Exit fullscreen mode

Then reload and restart:

sudo systemctl daemon-reload
sudo systemctl restart tunaresq_be
Enter fullscreen mode Exit fullscreen mode

Now, your logs will be saved to:

  • /var/www/tunaresq_be/logs/access.log
  • /var/www/tunaresq_be/logs/error.log

4. Confirm Gunicorn is Listening on the Socket

If your Gunicorn binds to a UNIX socket, ensure it's actually running and the socket exists:

List Gunicorn Sockets

sudo lsof -nP -U | grep gunicorn
Enter fullscreen mode Exit fullscreen mode

Check Socket File

ls -la /var/www/tunaresq_be/tunaresq_be.sock
Enter fullscreen mode Exit fullscreen mode

If the socket file doesn’t exist, Gunicorn likely failed to start—check logs via journalctl or your error.log.


🛠️ Quick Commands Summary

# View Gunicorn logs
sudo journalctl -u tunaresq_be.service -e

# Follow logs live
sudo journalctl -u tunaresq_be.service -f

# Restart and reload service
sudo systemctl daemon-reload
sudo systemctl restart tunaresq_be

# Check service status
sudo systemctl status tunaresq_be
Enter fullscreen mode Exit fullscreen mode

Final Tip

Always ensure your Gunicorn service:

  • Has correct permissions for socket and logs
  • Logs meaningful errors (via --error-logfile)
  • Is managed cleanly using systemctl

Comments 0 total

    Add comment