当通过cron运行时,df显示FreeBSD的实际大小加倍

时间:2018-01-23 13:26:52

标签: cron freebsd df

我编写了一个从服务器收集数据的bash脚本 并将其发送到由a监视的日志文件 splunkforwarder。服务器运行FreeBSD并有一个ZPool 通过Samba共享。所以当然是我喜欢的事情之一 请密切注意的是,在这个份额上使用了多少空间。

为了保持可读性,我从我的脚本中提取了实现此目的的行:

#!/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上。我有另一个ZFS存储服务器 在Debian上运行,当我在那里运行完全相同的脚本时, 我总是得到正确的数字。

我尝试以不同的用户身份运行cron作业 (包括root),但它总是相同的结果。我也有 将PATH环境变量设置为与我相同的值 当我手动运行此脚本(而不是缩短 cron通常使用的版本。)

我完全不知道这个问题的原因 我真的不知道如何调试这个问题。再加上我 无法在互联网上找到任何均匀的信息 远程与此问题有关。

我真的希望你能在这里帮助我,任何提示都是 非常感谢:)

1 个答案:

答案 0 :(得分:0)

df(1)使用环境变量BLOCKSIZE来确定报告磁盘空间时使用的单位。

默认情况下,由于历史原因,使用的块大小为512。通常在一个登录shell的环境中将此变量设置为更方便的值。例如:

setenv  BLOCKSIZE  "K"

cron(8)使用与登录shell不同的环境运行。您看到的症状与BLOCKSIZE环境未定义的cron一致,并且对于环境设置为k1024登录shell。