![Shell 脚本在作为 cron 作业执行时传递空值](https://linux22.com/image/4496/Shell%20%E8%84%9A%E6%9C%AC%E5%9C%A8%E4%BD%9C%E4%B8%BA%20cron%20%E4%BD%9C%E4%B8%9A%E6%89%A7%E8%A1%8C%E6%97%B6%E4%BC%A0%E9%80%92%E7%A9%BA%E5%80%BC.png)
我们使用以下命令来获取页面空间值,我需要检查已使用页面空间的百分比。为此,我使用了下面的代码,但是在运行此脚本时,它将空值传递到函数中。
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 中执行脚本有一些规则:
- 对于所有命令,请使用$(哪个命令)在您的脚本中以避免 crontab 中的路径问题。
- 如果您在命令行上测试脚本,请以与 crontab 相同的用户身份执行它。
- 在 crontab 中设置完整路径名
- 在脚本中设置正确的 shell 如下舍邦。
如果这些提示不起作用:在脚本中生成日志文件并记录所有变量以隔离问题。