我有以下 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 脚本,有人可以提供帮助。