> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ahmadraza.in/llms.txt
> Use this file to discover all available pages before exploring further.

# 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`:

```ini theme={null}
[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:

   ```bash theme={null}
   sudo nano /etc/logrotate.d/app
   ```

   Add the following configuration:

   ```plaintext theme={null}
   /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:

   ```bash theme={null}
   sudo chmod 644 /var/log/app/app.log
   sudo chown root:root /var/log/app/app.log
   ```

   Ensure the directory has appropriate permissions:

   ```bash theme={null}
   sudo chmod 755 /var/log/app/
   ```

   Create the log file if it doesn't exist:

   ```bash theme={null}
   sudo touch /var/log/app/app.log
   ```

   Restart the service to ensure it is writing logs:

   ```bash theme={null}
   sudo systemctl restart app.service
   ```

3. **Verify Logrotate Functionality**

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

   ```bash theme={null}
   cat /var/lib/logrotate/status
   ```

   Run `logrotate` in verbose mode to see detailed output:

   ```bash theme={null}
   sudo logrotate -v /etc/logrotate.d/app
   ```

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

   ```bash theme={null}
   sudo logrotate -d /etc/logrotate.d/app
   ```

4. **Manually Trigger Log Rotation**

   Force a log rotation to test the setup:

   ```bash theme={null}
   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.
