bash - Bash 脚本上的 Cron Pipe zcat 不起作用

标签 bash cron pipe goaccess

我根据本页上的教程创建了一个脚本:https://johnveldboom.com/posts/goaccess-automated-reports-last-30-days-via-cron/ 。当脚本从终端运行时,它可以完美运行。问题是当 cron 运行脚本时,管道似乎不起作用。

我在 Google 上搜索了可能的解决方案。我尝试在 cron 上的 bash 中添加“-c”,但这没有帮助。

这是脚本

 #!/bin/bash
 # filename: goaccess.sh (with +x permission)
 HOST="myHost"
 GOACCESSREPORT_DIR=/home/user/goaccess_reports/
 DATE=$(date +'%Y.%m')
 /bin/zcat `find /var/log/nginx/ -name "myhost_access.log.*.gz" -mtime -20` | goaccess > $GOACCESSREPORT_DIR/$HOST-monthly-$DATE.html
 echo "My Host GoAccess Report" | sudo mail -s "My Host GoAccess Report" <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="30555d51595c70445543441e535f5d" rel="noreferrer noopener nofollow">[email protected]</a> -A $GOACCESSREPORT_DIR/$HOST-monthly-$DATE.html

这是我的计划

 00 22 * * 5 /bin/bash -c /home/user/goaccess.sh

输出文件信息如下,这让我认为管道不起作用:

GoAccess - 1.2 用法:goaccess [文件名] [ 选项 ... ] [-c][-M][-H][-q][-d][...] 还可以提供以下选项命令:日志和日期格式选项 --date-format= - 指定日志日期格式。例如,%d/%b/%Y --log-format= - 指定日志格式。内引号需要转义,或者使用单引号。 --time-format= - 指定日志时间格式。例如,%H:%M:%S 用户界面选项 -c --config-dialog - 提示日志/日期/时间配置窗口。 -i --hl-header - 颜色突出显示事件面板。 -m --with-mouse - 在主仪表板上启用鼠标支持。 --color= - 指定自定义颜色。有关更多详细信息和选项,请参阅联机帮助页。 --color-scheme=<1|2|3> - 方案:1 => 灰色,2 => 绿色,3 => Monokai。 --html-custom-css= - 在 HTML 报告中指定自定义 CSS 文件。 --html-custom-js= - 在 HTML 报告中指定自定义 JS 文件。 --html-prefs= - 设置默认 HTML 报告首选项。 --html-report-title=

提前谢谢您。

最佳答案

我遇到了同样的问题并找到了答案 here .

您需要在 goaccess 命令后使用破折号来告诉它您正在通过管道传输日志:

/bin/zcat `find /var/log/nginx/ -name "myhost_access.log.*.gz" -mtime -20` | goaccess - > $GOACCESSREPORT_DIR/$HOST-monthly-$DATE.html

关于bash - Bash 脚本上的 Cron Pipe zcat 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61937884/

相关文章:

bash - 您如何一遍又一遍地在bash中运行命令直到成功?

linux - 当脚本写入 stdout 和 stderr 时如何防止 cron 电子邮件

shell - 复制标准输出,将其通过管道传输到两个不同的命令,将两者的结果收集到最终程序的标准输入

Linux: 'transferring'/镜像符号链接(symbolic link)的只读权限(用于网络服务器)

linux - 如何将 "find"与 "grep"结合用于文件内部的特定信息并包含找到信息的文件名?

bash - 我们什么时候需要用大括号括住 shell 变量?

perl - 是否有用 Perl 编写的类似 cron 的服务?

perl - 如何在不使用 select 的情况下检查(查看)Perl 中管道数据的 STDIN?

Bash - 从外部文件获取变量

javascript - 使用 Jest 测试 node-cron 作业功能