我编写了一个 bash 脚本,它从服务器收集数据并将其发送到一个由 splunkforwarder 监控的日志文件。服务器运行 FreeBSD 并有一个通过 Samba 共享的 ZPool。因此,我当然希望 splunk 关注的一件事是在所述共享上使用了多少空间。
为了保持可读性,我从脚本中提取了实现此目的的行:
#!/usr/bin/env bash
while read disk used avail ; do
# In reality I pass these values to a function
# that adds some formatting, but let's keep it
# simple for the moment
echo $disk " " $used " " $avail
done < <(df | awk '/datapool\// {print $1, $3, $4}')
当我从命令行运行这些行时,我得到了正确的数字(我已经将输出与 进行了比较zfs list
)。但是当我通过 cron 运行这个脚本时,我得到的数字都翻了一番。
让我们看看我机器上的确切输出:
# Manually
datapool/myshare 4842023944 24758292883
# Via cron
datapool/myshare 9684047889 49516585766
这只发生在 FreeBSD 上。我有另一个在 Debian 上运行的 ZFS 存储服务器,当我在那里运行完全相同的脚本时,我总是得到正确的数字。
我曾尝试以不同用户(包括 root)的身份运行 cron 作业,但结果始终相同。我还将 PATH 环境变量设置为与手动运行此脚本时相同的值(而不是 cron 通常使用的缩短版本)。
我完全不知道这个问题的原因,我真的不知道如何调试这个问题。另外,我在互联网上找不到任何与此问题远程相关的信息。
我真的希望你能在这里帮助我,非常感谢任何提示:)