crontab shell 脚本执行不符合预期

crontab shell 脚本执行不符合预期

我有一个名为 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

相关内容