logrotate 未在 postrotate 中执行自定义 shell 脚本

logrotate 未在 postrotate 中执行自定义 shell 脚本

我有以下 logrotate 配置文件

/home/application/*/shared/log/*.log {
  daily
  rotate 10
  missingok
  nocompress
  notifempty
  copytruncate
  sharedscripts
  postrotate
    echo "Hi....." 
    /home/application/test.sh > /home/application/test_bash.log 2>&1
    echo "By....."
  endscript
}

/home/application/test.sh 当前内容如下(我也尝试在 shell 脚本中创建虚拟文件,但没有成功)

#!/bin/sh

echo "=============================================="

当我运行 logrotate 时,所有文件都成功旋转,但 test.sh 脚本未执行

Logrotate potput 如下所示:

运行 postrotate 脚本 使用 arg /home/application/ 运行脚本/共享/日志/.log:“回显“嗨.....”/home/application/test.sh>/home/application/test_bash.log 2>&1回显“由.....””

/home/application/test_bash.log 日志文件未创建。

我甚至尝试这样简单的例子

/home/application/*/shared/log/*.log { 
  daily 
  rotate 10 
  missingok 
  nocompress 
  notifempty 
  copytruncate 
  sharedscripts 
  postrotate 
    mkdir /home/application/demo_v2/shared/log/arch 
  endscript 
}

为什么 logrotate 没有执行我的 shell 脚本?我做错了什么?

答案1

正如之前有人说过的,“echo”命令将会失败,因为 logrotate 没有 TTY,所以您可以尝试......

echo "Hi....." > /home/application/test_bash.log
/home/application/test.sh >> /home/application/test_bash.log 2>&1
echo "By....." >> > /home/application/test_bash.log

目前还不清楚如果您尝试在没有 TTY 的情况下执行 echo 之类的操作,logrotate 会做什么。

-logrotate-dvf- 的输出似乎表明您的脚本已经运行。

首先尝试一些简单的操作,例如 - echo foo > /home/application/test_bash.log 2>&1

如果可行,那么脚本应该很容易调试。

答案2

Logrotate 没有附加神奇的 TTY;您希望将此输出写入哪里?

人们通常会运行一个脚本,将其输出重定向到专用的 dlog,并避免在 stdout 上输出任何内容;您似乎混淆了上面的几个概念。

也许,如果我们知道你真正想要的是什么有了这个 logrotate 脚本,有人可以提供帮助。

相关内容