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
    • 最新
    • 标签
主页 / unix / 问题 / 440004
Accepted
GP92
GP92
Asked: 2018-04-26 06:43:50 +0800 CST2018-04-26 06:43:50 +0800 CST 2018-04-26 06:43:50 +0800 CST

为什么在 RHEL 的 logrotate 中使用 kill -HUP?在所有情况下都需要吗?

  • 772

我看到 syslog 日志记录使用了 kill -HUP。

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

我知道使用 -HUP 是因为像 syslog 这样的守护进程在捕获 SIGHUP 时会尝试自行重启,因此所有打开的文件都会被刷新。

我不明白为什么他们需要刷新。

如果 syslog 仅将新日志附加到日志文件,则打开的文件将处于写入模式。如果是这种情况,当日志切换发生并且在文件系统中的旧日志文件条目被删除时,它不会在需要附加新日志行时自动创建新文件(毕竟 syslog服务以root身份运行)?

我认为区别更多在于对 w 和 u 模式的理解。我无法快速得出结论。

另外,为什么只使用kill -HUP,为什么不重新启动服务。会有什么不同吗?

signals syslog
  • 2 2 个回答
  • 13802 Views

2 个回答

  • Voted
  1. Best Answer
    Rémi Sauvat
    2018-04-26T07:16:32+08:002018-04-26T07:16:32+08:00

    通常,服务在运行时会保持打开日志文件。这意味着他们不关心日志文件是否被重命名/移动或删除,他们将继续写入已处理的打开文件。

    当 logrotate 移动文件时,服务会继续写入同一个文件。

    示例:crond 将写入 /var/log/cron.log。然后 logrotate 会将文件重命名为 /var/log/cron.log.1,因此 crond 将继续写入打开的文件 /var/log/cron.log.1。

    向 crond 发送 HUP 信号将强制他关闭现有文件句柄并打开原始路径 /var/log/cron.log 的新文件句柄,这将创建一个新文件。

    使用 HUP 信号而不是另一个信号由程序自行决定。像 php-fpm 这样的一些服务会监听 USR1 信号来重新打开它的文件句柄而不终止它自己。

    • 10
  2. Random832
    2018-04-26T07:05:37+08:002018-04-26T07:05:37+08:00

    当您移动文件时,打开该文件的程序仍会在新位置打开相同的文件,并将继续附加到旧日志文件。kill -HUP不一定会让它重新启动(对于 syslog 它确实如此,但对于例如管理自己的日志的 cron 守护进程,它只是控制日志文件本身),但可能只是导致它关闭文件并通过以下方式打开文件name,这是这个脚本的重要部分。对 syslogd 进行硬重启也意味着在重启过程中 syslog 服务不可用,而使用 syslogd 知道如何处理的信号允许它为“重启”透明执行所需的任何操作。

    • 3

相关问题

  • 以两种不同的方式处理 SIGALRM

  • 为什么已经存在 SIGSTOP 时存在 SIGTSTP?

  • logrotate 描述符可以处理多个通配符吗?

  • 调试的信号编号是 1 到 64 中的哪个数字?

  • 是否有实现 RFC 5848“签名系统日志消息”的系统日志守护程序?

Sidebar

Stats

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

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve