我有一个名为 run_logs.sh 的脚本,其内容如下:
#!/bin/bash
source /root/.profile
zcat /var/log/apache2/access.log.*.gz | /usr/bin/goaccess - access.log
当我以 root 身份运行该脚本时(无论是否带有“bash”前缀),在命令行上,goaccess 软件都会处理 access.log 和所有 gzip 压缩的日志。但是当 cron 运行它时,它只处理 access.log。我该如何纠正这个问题?
我的根 crontab 如下所示:
0 * * * * /root/run_logs.sh
答案1
解决方案已找到这里这实质上表明 goaccess 有一个特定要求,即在参数中添加连字符以处理多个文件。但是出于某种原因,它在命令行中运行时没有这个也可以工作,而在 cron 中运行时则不行。我已在 OP 中更新了正确的命令以反映额外的 goaccess 参数。
答案2
按照如下方式更改您的脚本。
#!/bin/bash
在脚本开头添加, ,表示应使用 Bash shell 执行该脚本。
#!/bin/bash
zcat /var/log/apache2/access.log.*.gz | goaccess access.log
使脚本可执行。
chmod +x /root/run_logs.sh
更新您的 crontab 条目以直接指向脚本。
0 * * * * root /root/run_logs.sh