AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[logrotate](server)

Martin Hope
Maestro223
Asked: 2021-12-31 22:21:11 +0800 CST

Logrotate 失败且没有错误

  • 0

好的,我做了一个嘘声。我认为

问题: Logrotate 失败(或者我错误地认为它已经死了)并且没有提供任何错误消息来解释原因:

● logrotate.service - Rotate log files
   Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
   Active: inactive (dead) since Fri 2021-12-31 13:05:25 CST; 42min ago
     Docs: man:logrotate(8)
           man:logrotate.conf(5)
  Process: 27844 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS)
 Main PID: 27844 (code=exited, status=0/SUCCESS)

Dec 31 13:05:25 server1.example.com systemd[1]: Starting Rotate log files...
Dec 31 13:05:25 server1.example.com systemd[1]: logrotate.service: Succeeded.
Dec 31 13:05:25 server1.example.com systemd[1]: Started Rotate log files.

我想使用 systemd 自动重新启动 logrotate,因为有时它会在重新启动后失败。因此在我的/usr/lib/systemd/system/logrotate.service文件中我添加了:

Restart=always

上面添加了kill logrotate服务。从那里我决定撤消我的肮脏工作并删除Restart=always和systemctl daemon-reload && systemctl start logrotate

没运气。

然后我决定调查系统日志,看看是否能找到任何线索,使用:
#grep "logrotate" /var/log/syslog。这产生了一个线索:

Dec 31 00:00:03 server1 systemd[1]: logrotate.service: Succeeded.
Dec 31 00:36:16 server1 clamd[3544]: Fri Dec 31 00:36:16 2021 -> ^File path check failure on: /var/tmp/systemd-private-2f8e6be5a16040adb29706b9e31ae841-logrotate.service-DbrlAK
Dec 31 00:37:31 server1 systemd[1]: logrotate.service: Succeeded.
Dec 31 12:51:17 server1 systemd[1]: logrotate.service: Succeeded.
Dec 31 13:00:58 server1 systemd[1]: logrotate.service: Succeeded.
Dec 31 13:05:25 server1 systemd[1]: logrotate.service: Succeeded.

注意:您看到“成功”的所有时间都是我手动尝试启动 logrotate。

我在这篇关于服务器故障的帖子中读到,这可能是由于 logrotate 试图访问var/log/目录之外的日志而引起的。/var/log而且我虽然这可能是我的问题,但是除了上面的系统日志错误之外,我找不到任何外部日志的指示:

重申:

Dec 31 00:36:16 server1 clamd[3544]: Fri Dec 31 00:36:16 2021 -> ^File path check failure on: /var/tmp/systemd-private-2f8e6be5a16040adb29706b9e31ae841-logrotate.service-DbrlAK

从我调查蛤蜊,但是

#grep "log" /etc/clamav/clamd.conf 
LogSyslog false
LogFile /var/log/clamav/clamav.log

收益,什么都没有。有谁知道为什么 logrotate 不会启动?

logrotate
  • 1 个回答
  • 187 Views
Martin Hope
User..
Asked: 2021-11-15 12:44:29 +0800 CST

Ubuntu 中 logrotate.conf 的默认配置是什么?

  • 0

用户权限是否与/etc/logrotate.conf一个 ubuntu 版本不同?.... 为什么?正如我在 ubuntu 18.04 中发现的那样

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

就像在 ubuntu 20.04 中一样

# use the adm group by default, since this is the owning group 
# of /var/log/syslog.
su root adm
ubuntu logrotate
  • 1 个回答
  • 77 Views
Martin Hope
TS_
Asked: 2021-10-13 08:24:30 +0800 CST

logrotate 是如何工作的?

  • 0

当它“旋转”一个日志文件时,logrotate 究竟做了什么?例如,它是否重命名现有文件并使用旧名称创建一个新文件?

本文介绍了在日志轮换后重新启动服务,以便它可以使用新的日志文件。这仅仅是因为该进程可能会保留旧文件的打开句柄吗?如果我的进程每次写入日志时都会打开一个新的文件句柄,它会在不重新启动的情况下使用新的日志文件吗?

linux logrotate
  • 1 个回答
  • 215 Views
Martin Hope
justanotheruser1019
Asked: 2021-07-29 11:19:22 +0800 CST

文件大小达到某个阈值时不执行轮换

  • 1

我有以下配置/etc/logrotate.d/rsyslog:

/var/log/syslog
{
        rotate 7
        size 1G
        missingok
        notifempty
        delaycompress
        compress
        postrotate
          invoke-rc.d rsyslog rotate >/dev/null
        endscript
}

据我了解,我已经设置了它,所以如果/var/log/syslog达到1G大小,它会自行旋转。此外,系统将保持 7 次旋转。

在测试中,我这样做了:

cat /dev/null > /var/log/syslog
base64 /dev/urandom | head -c 999999999 > /var/log/syslog
logger -s "hello"

然后我这样做了:

ls -las /var/log/syslog*
976568 -rw-r----- 1 syslog adm 1000000072 Jul 28 19:11 /var/log/syslog

它显示文件大小,因为1.000000728 GB它不应该自己旋转?

应用配置时,我做了systemctl restart rsyslog

rsyslog logrotate
  • 1 个回答
  • 49 Views
Martin Hope
DevOpsSauce
Asked: 2021-07-13 12:07:35 +0800 CST

Logrotate 不写入新的 .log 文件

  • 0

我有 4 个自定义 systemd 服务写入自定义日志/var/log/。我设置了一个logrotate配置文件,但它没有写入最新的日志。它仍在写入旧.log.1文件。新的已创建,只是没有数据。

这是我的 logrotate 配置:

/var/log/dealer*.log {
        daily
        missingok
        rotate 7
        delaycompress
        notifempty
        su root root
        postrotate
        /bin/systemctl reload dealer*.service > /dev/null 2>/dev/null || true
        endscript
        create 0644 root root

}

最新的日志文件是空的:

-rw-r--r--  1 root      root               0 Jul 12 11:39 dealerF2f.log
-rw-r--r--  1 root      root               0 Jul 12 11:39 dealerOutbound.log
-rw-r--r--  1 root      root               0 Jul 12 11:39 dealerTimeout.log
-rw-r--r--  1 root      root               0 Jul 12 11:39 dealerWeb.log

它仍在写信给.log.1:

-rw-r--r--  1 root      root             36M Jul 12 12:52 dealerOutbound.log.1
-rw-r--r--  1 root      root            9.2M Jul 12 12:52 dealerF2f.log.1
-rw-r--r--  1 root      root             19M Jul 12 12:52 dealerWeb.log.1
-rw-r--r--  1 root      root            171M Jul 12 12:52 dealerTimeout.log.1
systemd logrotate
  • 1 个回答
  • 965 Views
Martin Hope
Maestro223
Asked: 2021-06-09 01:35:01 +0800 CST

Logrotate 服务失败

  • 1

我的 logrotate 服务失败。它抱怨 modsecurity 的重复条目。

 ● logrotate.service - Rotate log files
       Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
       Active: failed (Result: exit-code) since Tue 2021-06-08 14:22:07 CST; 2h 54min ago
         Docs: man:logrotate(8)
               man:logrotate.conf(5)
     Main PID: 15370 (code=exited, status=1/FAILURE)
    
    Jun 08 14:22:07 server1.example.com systemd[1]: Starting Rotate log files...
    Jun 08 14:22:07 server1.example.com logrotate[15370]: error: modsecurity:1 duplicate log entry for /var/log/apache2/modsec_audit.log
    Jun 08 14:22:07 server1.example.com logrotate[15370]: error: found error in file modsecurity, skipping
    Jun 08 14:22:07 server1.example.com systemd[1]: logrotate.service: Main process exited, code=exited, status=1/FAILURE
    Jun 08 14:22:07 server1.example.com systemd[1]: logrotate.service: Failed with result 'exit-code'.
    Jun 08 14:22:07 server1.example.com systemd[1]: Failed to start Rotate log files.

但是,/etc/logrotate.d/modsecurity 不包含任何重复项:

/var/log/apache2/modsec_audit.log
{
        rotate 14
        daily
        missingok
        compress
        delaycompress
        notifempty
}

任何想法?

更新:

#grep -r 'modsec_audit.log' /etc/

/etc/logrotate.d/modsecurity:/var/log/apache2/modsec_audit.log
/etc/modsecurity/modsecurity.conf:SecAuditLog /var/log/apache2/modsec_audit.log
/etc/modsecurity/modsecurity.conf-recommended:SecAuditLog /var/log/apache2/modsec_audit.log

所以我经历了:

/etc/modsecurity/modsecurity.conf:SecAuditLog /var/log/apache2/modsec_audit.log
/etc/modsecurity/modsecurity.conf-recommended:SecAuditLog /var/log/apache2/modsec_audit.log

并散列出 modsec_audit.log 值,如下所示

#SecAuditLogType Serial
#SecAuditLog /var/log/apache2/modsec_audit.log

然后跑:
systemctl restart logrotate

同样的错误

更新 2:

遵循@Nikita Kipriyanov 的建议,我完成并完全散列了 /etc/logrotate.d/modsecurity ,现在 logrotate 成功执行(所有 mdosec 日志都散列了):

#systemctl status logrotate
● logrotate.service - Rotate log files
       Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
       Active: inactive (dead) since Thu 2021-06-10 09:36:53 CST; 52s ago
         Docs: man:logrotate(8)
               man:logrotate.conf(5)
      Process: 20308 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS)
     Main PID: 20308 (code=exited, status=0/SUCCESS)

        Jun 10 09:36:52 tester1.example.com systemd[1]: Starting Rotate log files...
        Jun 10 09:36:53 tester1.example.com systemd[1]: logrotate.service: Succeeded.
        Jun 10 09:36:53 tester1.example.com systemd[1]: Started Rotate log files.

所以我启用了位于的原始 modsec_audit.log/etc/modsecurity/modsecuirty.conf以查看会发生什么。再次,事情似乎正常工作

# systemctl status logrotate
● logrotate.service - Rotate log files
       Loaded: loaded (/lib/systemd/system/logrotate.service; static; vendor preset: enabled)
       Active: inactive (dead) since Thu 2021-06-10 09:54:05 CST; 4s ago
         Docs: man:logrotate(8)
               man:logrotate.conf(5)
      Process: 21452 ExecStart=/usr/sbin/logrotate /etc/logrotate.conf (code=exited, status=0/SUCCESS)
     Main PID: 21452 (code=exited, status=0/SUCCESS)

    Jun 10 09:54:05 tester1.example.com systemd[1]: Starting Rotate log files...
    Jun 10 09:54:05 tester1.example.com systemd[1]: logrotate.service: Succeeded.
    Jun 10 09:54:05 tester1.example.com systemd[1]: Started Rotate log files.

同样的故事/etc/modsecurity/modsecurity-recommended,这意味着 logrotate 服务仅在我使用时失败,
/etc/logrotate.d/modsecuirty并且碰撞必须是@Nikita Kipriyanov 建议的通配符

linux logrotate
  • 2 个回答
  • 2729 Views
Martin Hope
Niloct
Asked: 2021-02-04 06:18:08 +0800 CST

logrotate postrotate 似乎没有被执行

  • 0

我在 Ubuntu 20.04 上有这个配置:

/home/impulse/nginx/log/*/notice.log /home/impulse/nginx/log/*/access.status_ok.log /home/impulse/nginx/log/*/access.status_erro.log {
  daily
  nomail
  dateext
  rotate 31
  dateyesterday
  create root root
  notifempty
  nocompress
  extension .log
  # Script to notify nginx that logfile changed.
  postrotate
    docker exec -ti impulse_web sudo pkill -HUP nginx
  endscript
}

docker二进制文件只允许sudo在服务器上通过。postrotate脚本没有被执行。

我的问题是,在哪个帐户下logrotate运行?而且,我可以记录它的执行以跟踪为什么不应用它吗?

该脚本在使用sudo.

我当前的日志目录:

-rw-r--r-- 1 root root 3073955 fev  3 11:02 access.status_ok-20210128.log
-rw-r--r-- 1 root root       0 jan 29 00:00 access.status_ok.log

由于access.status_ok.log为空,logrotate 失败。并且由于postrotate失败,nginx一直在记录旧文件。

ubuntu sudo docker logrotate
  • 1 个回答
  • 337 Views
Martin Hope
DevOpsSauce
Asked: 2021-01-21 08:48:01 +0800 CST

Rsyslog 旋转,但仍记录到旧日志

  • 0

服务器:Ubuntu 服务器 14.04

我有一个 Watchguard Firebox 记录到服务器。它应该每天轮换,但是,当轮换发生时,它不会写入新日志。它一直写到前一个。

里面的配置/etc/logrotate.d/

/var/log/watchguard
{
    rotate 14
    daily
    missingok
    create 640 syslog adm
    compress
    delaycompress
    sharedscripts
    su root syslog
    postrotate
            /usr/sbin/service rsyslog reload >/dev/null 2>&1 || true
    endscript
}

如您所见,轮换正在发生,但最新日志未写入:

-rw-r----- 1 syslog    adm        20 Jan 17 02:30 watchguard.3.gz
-rw-r----- 1 syslog    adm        20 Jan 18 02:30 watchguard.2.gz
-rw-r----- 1 syslog    adm         0 Jan 20 02:30 watchguard <---- SHOULD CONTAIN DATA
-rw-r----- 1 syslog    adm      3.0G Jan 20 10:34 watchguard.1 <--- ROTATED, BUT STILL GETTING DATA

就好像它不关心文件的名称一样。它只是继续写。我的logrotate配置语法不正确吗?

rsyslog logrotate watchguard ubuntu-14.04
  • 1 个回答
  • 520 Views
Martin Hope
x3nr0s
Asked: 2020-08-28 02:23:03 +0800 CST

NGINX 服务轮换不使用新的日志文件

  • 3

我对任何告诉 nginx 使用新日志文件的命令都有问题。我正在使用 Ubuntu 18.04、nginx/1.14.0、logrotate 3.11.0

如果我手动或通过 logrotate 在 /var/log/nginx 中创建新文件access.log或error.log文件,它们不会被使用,而是服务使用旧的日志文件(我已将其重命名为access.log.1用于此测试,模拟 logrotate 的作用。)

我已经尝试了以下命令(单独)。它们都不会产生任何错误消息,它们都会产生预期的输出。但是 nginx 拒绝停止使用旧日志。

service nginx rotate

invoke-rc.d nginx rotate

kill -USR1 `cat /var/run/nginx.pid`

我还验证了上述.pid文件在正确的位置。

我能够让日志轮换工作的唯一方法是通过 a service nginx reload,它可以完成这项工作,但也会重新加载配置文件。我知道重新加载没有停机时间,但我仍然希望尽可能少地重新加载,这就是我想要开始service nginx rotate工作的原因。

我几乎可以肯定这是由于/var/log. 最近我们设置了一个 cronjob 来确保日志文件具有安全的权限。这是为了进行审计,因为这家渗透测试公司就日志记录提出了各种安全措施。我们设置的 cronjob 在启动时运行:

#!/bin/bash
  
setfacl -Rm u::rwx,g::r--,o::--- /var/log
find /var/log -type f -exec chmod g-wx,o-rwx "{}" + -o -type d -exec chmod g-w,o-rwx "{}" +
chmod g+wx /var/log

chown -R www-data:adm /var/log/nginx

下面是运行cronjob后相关目录和文件的权限:

/var/log 目录本身:

drwxrwx--- 14 root syslog  4096 Aug 27 10:01 log

/var/log/nginx 目录本身:

drwxr-----  2 www-data  adm               4096 Aug 24 02:25  nginx

以及 /var/log/nginx 的内容(我们在 nginx conf 中使用自定义命名日志):

-rwxr----- 1 www-data adm     0 Aug 24 02:24 access.log
-rwxr----- 1 www-data adm   108 Aug 24 02:24 error.log
-rwxr----- 1 www-data adm 49317 Aug 27 10:11 x3nr0s.access.log
-rwxr----- 1 www-data adm   798 Aug 27 10:02 x3nr0s.error.log

如果我们运行logrotate --force /etc/logrotate.d/nginx -v(详细),甚至是手动touch创建新文件,它们会被创建为 640 权限(根据 logrotate 的配置文件)。根据我的阅读,640 就足够了:

-rwxr----- 1 www-data adm     0 Aug 24 02:24 access.log
-rw-r----- 1 www-data adm     0 Aug 27 10:13 error.log
-rwxr----- 1 www-data adm  1972 Aug 27 10:13 error.log.1
-rw-r----- 1 www-data adm     0 Aug 27 10:13 x3nr0s.access.log
-rwxr----- 1 www-data adm 51521 Aug 27 10:13 x3nr0s.access.log.1
-rw-r----- 1 www-data adm     0 Aug 27 10:13 x3nr0s.error.log
-rwxr----- 1 www-data adm   798 Aug 27 10:02 x3nr0s.error.log.1

如您所见,新文件保持为空,并且日志记录继续到旧文件。我还验证了详细的 logrotate 输出,关于 postrotate 部分似乎一切正常。(运行invoke-rc.d nginx rotate。正如我之前提到的,这个命令似乎没有旋转任何东西......)

作为最后一个测试,我尝试授予用户对新文件的执行权限,并执行了service nginx rotate. 尽管如此,nginx 仍然使用旧文件。其他一些答案提到检查磁盘空间是否已满。它不是。

非常感谢您的帮助!谢谢。

更多信息

这是我的 /etc/logrotate.d/nginx 配置:

/var/log/nginx/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                invoke-rc.d nginx rotate >/dev/null 2>&1
        endscript
}

如上所述,我让 logrotate 和 nginx 正确处理新日志文件的唯一方法是将postrotate部分替换为service nginx reload.

这是输出ps -ef | grep nginx:

root      1367     1  0 10:45 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data  1368  1367  0 10:45 ?        00:00:00 nginx: worker process
www-data  1369  1367  0 10:45 ?        00:00:00 nginx: worker process
www-data  1370  1367  0 10:45 ?        00:00:00 nginx: worker process
www-data  1371  1367  0 10:45 ?        00:00:00 nginx: worker process
root     15247 14835  0 11:19 pts/0    00:00:00 grep --color=auto nginx

这是getfacl/var/log 上的:

# file: var/log
# owner: root
# group: syslog
user::rwx
group::rwx
other::---

这是getfacl/var/log/nginx 上的:

# file: var/log/nginx
# owner: www-data
# group: adm
user::rwx
group::r--
other::---
linux ubuntu nginx logrotate
  • 1 个回答
  • 3730 Views
Martin Hope
user630702
Asked: 2020-07-03 23:24:06 +0800 CST

Logrotate - 有冲突吗?

  • 0

/etc/logrotate.d/auth.conf是我手动创建的东西。但也有一个入口/var/log/auth.log。/etc/logrotate.d/rsyslog

有冲突吗?

我必须从中删除auth.log 条目/etc/logrotate.d/rsyslog吗?我正在尝试auth.conf使用 puppet 进行管理,但我还不想rsyslog使用 puppet 进行管理。

/etc/logrotate.d/auth.conf 内容:

/var/log/auth.log {
  daily
  rotate 5
  compress
  create 0644 root adm
}

/etc/logrotate.d/rsyslog 内容:

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                invoke-rc.d rsyslog reload > /dev/null
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                invoke-rc.d rsyslog reload > /dev/null
        endscript
}
logrotate
  • 1 个回答
  • 276 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve