logrotate 是如何工作的?

mik*_*ent 6 logs logrotate

我真的很难理解logrotate在我自己的 shell 文件中运行命令时是如何工作的,以及它是如何工作的。

有问题的命令是:

rclone -L -vv --log-file "/home/mike/tmp/qqq.log"  sync "/media/mike/W10 D drive/My Documents/"  remote:MyDocuments_M17A_from_Linux
Run Code Online (Sandbox Code Playgroud)

我想要什么:

我希望经常检查这个 qqq.log 文件,比如每 10 分钟一次,看看它是否超过了给定的大小,比如 1 MB。如果有,旋转文件。rclone使用该-vv选项会故意产生大量输出(即尝试理解让 logrotate 为这个用例工作)。

有一个适度有用的教程在这里,但它仍然让我在黑暗中:

  1. 您打算如何配置来自您自己的非系统进程的日志轮换?你的意思是在底部贴线/etc/logrotate.conf吗?这就是我所做的(在“#system-specific logs may be configured here”下):

    /home/mike/tmp/qqq.log {
      notifempty
      size 1M
      daily
      create 0664 root root
      rotate 3
    }
    
    Run Code Online (Sandbox Code Playgroud)

    后来:我现在意识到您也可以放入单个文件/etc/logrotate.d- 没有太大的复杂性。

  2. 是不是默认情况下logrotate每天只运行一次,凭借文件/etc/cron.daily/logrotate

  3. 这是否意味着如果我想要更频繁的检查,我可能应该设置一个cron作业来执行此操作,每 10 分钟运行一次(在本例中)?

  4. 你打算以logrotate <config file>root身份运行吗?我问这个问题是因为我以 root 和用户身份都尝试过。用户似乎没有工作。

指向此类设置的初学者指南的链接(这很常见)会有所帮助。我已经搜索过,但我发现的大部分内容都没有为您提供分步指南。

roa*_*ima 8

logrotate 可以作为普通用户运行,没有管理权限,为该用户轮换日志。

# Create a local per-user configuration file
cat >.logrotate.conf <<'X'
/home/mike/tmp/qqq.log {
    notifempty
    missingok
    size 1M
    rotate 3
}
X

# Run logrotate with that configuration file
/usr/sbin/logrotate -v -s .logrotate.state .logrotate.conf
Run Code Online (Sandbox Code Playgroud)

我删除了您的daily标准,因为您只想要基于大小的检查,这会将任何可能的操作限制为每天一次(每天第一次logrotate运行,因为它发生)。我已替换为createmissingok因此rclone创建输出文件而不是logrotate.

然后将logrotate命令放入用户的crontab文件中:

# Capture any existing crontab entries
crontab -l >.crontab

# Append ours to the list
echo '0 * * * * /usr/sbin/logrotate -s .logrotate.state .logrotate.conf >>.crontab.log 2>&1' >>.crontab

# Reload crontab
crontab .crontab
Run Code Online (Sandbox Code Playgroud)

使用此示例,命令的输出将写入.crontab.log,您可能希望logrotate每月循环或重置一个条目。