【问题标题】:Logrotate lastaction script not workingLogrotate lastaction 脚本不起作用
【发布时间】:2014-11-16 09:14:18
【问题描述】:

我有一个试图在我的“日志”文件夹中运行的 lastaction 脚本,因为我想将所有文件和文件夹移动到 log/archive 文件夹内的 log 文件夹中。所以我简单地添加了

mv log/* log/archive/2014

很明显,我收到一条错误消息,提示无法将存档文件夹移动到其自身的子目录,因此我尝试在移动命令中添加额外参数以移动除存档文件夹之外的所有内容。

mv !(archive) log/* log/archive/2014

这个确切的命令,如果从 cli 执行,工作得很好,但是当添加到 lastaction/endscript 块中时,它会抛出以下消息

logrotate_script: 2: logrotate_script: 语法错误:"(" 意外

有人知道为什么会这样吗?

【问题讨论】:

    标签: shell debian logrotate


    【解决方案1】:

    您正在使用bash 作为您的外壳。您还启用了extglob 设置。

    当 logrotate 正在执行该 shell 脚本时,其中一个或另一个不正确。

    另外,mv 命令在我看来也很奇怪。如果archive 在日志中,那么我不明白为什么!(archive) 没有log/ 作为前缀。此外,log/* 仍应匹配 log/archive,无论之前的 extglob glob 是什么。 (也就是说,我认为您想要 mv log/!(archive) log/archive/2014,假设您不想一开始就忽略来自 mv 的警告。)

    【讨论】:

    • 语法 (mv log/!(archive)) 对我来说在 cli 中不起作用,因为它会抛出“bash: !: event not found”
    • mv !(archive) 工作(如在您的 OP 中)但 mv log/!(archive) 没有?您是否启用了extglob?在您的外壳中,如果前者有效,则后者应该。在 logrotate 脚本中,您需要使用 bash 并确保 extglob 已启用,但历史扩展应该不是问题,因为它应该在脚本中默认禁用。
    猜你喜欢
    • 2012-10-19
    • 2015-12-20
    • 2011-05-22
    • 2019-09-13
    • 2018-07-29
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多