Linux
OS-Mgmt
Systemctl Log Rotate

Systemctl Service Logs Setup Using Logrotate

This guide explains how to set up log rotation for a service managed by systemctl using logrotate.

Service Setup in systemctl

First, create a systemctl service configuration for your application. Below is an example configuration file for a service named app:

[Unit]
Description=app
After=network.target
 
[Service]
Type=simple
User=ubuntu
Group=ubuntu
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/app.log
WorkingDirectory=/var/www/app
ExecStart=/var/www/app/main
Restart=always
 
[Install]
WantedBy=multi-user.target

This configuration:

  • Defines the service with Description and After directives.
  • Redirects standard output and error to /var/log/app/app.log.
  • Sets the working directory and the command to start the service.
  • Configures the service to always restart if it fails.

Log Rotation Setup

To manage log rotation for the service logs, configure logrotate:

  1. Create a Logrotate Configuration File

    Edit or create the logrotate configuration file for your service:

    sudo nano /etc/logrotate.d/app

    Add the following configuration:

    /var/log/app/app.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 0640 root root
        sharedscripts
        postrotate
            systemctl reload app.service > /dev/null 2>&1 || true
        endscript
    }

    This configuration:

    • Rotates the log file daily.
    • Keeps 7 rotated log files before deleting the oldest.
    • Compresses old logs.
    • Skips empty logs.
    • Creates new log files with specific permissions and ownership.
    • Runs a script to reload the service after rotation.
  2. Prepare Log File and Directory

    Ensure the log file and directory have the correct permissions:

    sudo chmod 644 /var/log/app/app.log
    sudo chown root:root /var/log/app/app.log

    Ensure the directory has appropriate permissions:

    sudo chmod 755 /var/log/app/

    Create the log file if it doesn't exist:

    sudo touch /var/log/app/app.log

    Restart the service to ensure it is writing logs:

    sudo systemctl restart app.service
  3. Verify Logrotate Functionality

    Check the logrotate status file to confirm that the log file is tracked:

    cat /var/lib/logrotate/status

    Run logrotate in verbose mode to see detailed output:

    sudo logrotate -v /etc/logrotate.d/app

    Run logrotate in debug mode to understand why it might not be working:

    sudo logrotate -d /etc/logrotate.d/app
  4. Manually Trigger Log Rotation

    Force a log rotation to test the setup:

    sudo logrotate -f /etc/logrotate.d/app

By following these steps, you will set up log rotation for your service logs, ensuring they are managed and rotated daily.

This document provides a complete setup for managing and rotating logs for a service using logrotate. Adjust the paths and filenames according to your specific requirements.


🧙 AI Wizard - Instant Page Insights

Click the button below to analyze this page.
Get an AI-generated summary and key insights in seconds.
Powered by Perplexity AI!