Shell 脚本在作为 cron 作业执行时传递空值

Shell 脚本在作为 cron 作业执行时传递空值

我们使用以下命令来获取页面空间值,我需要检查已使用页面空间的百分比。为此,我使用了下面的代码,但是在运行此脚本时,它将空值传递到函数中。

MAX=`free -m | grep Swap | gawk '{ print $2 }'`
MIN=`free -m | grep Swap | gawk '{ print $3+300 }'`
DIV=`echo $MIN/$MAX*100|bc -l`
PAGESPACE=`print $(( round(DIV) ))`

PAGESPACE我正在我的函数之一中传递as 参数。

功能:

monPar 0 0 $PAGESPACE 80 90 db1adm "PAGE SPACE" now

如果我手动运行此脚本,它会给出正确的值。问题是当这个脚本在 crontab 中运行时:它将 0 值传递给函数。

答案1

cron 作业无法正常工作的第一个问题,请检查您的$PATH.
尝试$PATH在 cron 作业中显式设置,或使用所有实用程序的绝对路径。

第二个最可能的问题是,检查你的 shell。这round(DIV)不是典型的 shell 算术运算符,因此它可能在 cron 正在使用的 shell 中不可用。


另请注意,您可以PAGESPACE=通过执行 来简化这一点PAGESPACE=$(( round(DIV) ))。反引号不是必需的(如果 shell 遵循正常行为,则不应如此,但我不知道它是什么 shell)。

答案2

crontab 中执行脚本有一些规则:

  1. 对于所有命令,请使用$(哪个命令)在您的脚本中以避免 crontab 中的路径问题。
  2. 如果您在命令行上测试脚本,请以与 crontab 相同的用户身份执行它。
  3. 在 crontab 中设置完整路径名
  4. 在脚本中设置正确的 shell 如下舍邦

如果这些提示不起作用:在脚本中生成日志文件并记录所有变量以隔离问题。

相关内容