【发布时间】:2020-02-13 18:35:59
【问题描述】:
当我从命令行运行 BASH 脚本时,它会被执行。 当我尝试将其作为 cron 任务运行时,它失败了。通过异常方法,我发现了一个问题。它在于“which iptables”命令返回一个空字符串。我尝试在“/sbin”目录中找到的所有程序都会发生这种情况。 示例:
# crontab -e
* * * * * /root/test.sh >> /root/test.log 2>&1
test.sh
#!/bin/bash
IPT=$(which iptables);
echo ${IPT} >> /root/test.log
但在 test.log 中写入了空字符串。 在 Ubuntu 16.04 和 Debian 8 上测试。
【问题讨论】:
-
使用
IPT=$(/sbin/which iptables);? -
在我的操作系统上,命令位于“/usr/bin/which”。我忘了写其他命令,例如“which ps”,在通过 cron 调用时会返回正确的结果。
-
可能是权限问题。我建议您检查
/var/log/cron以查看任何错误消息。 -
使用完整路径:1. 防止此类错误 2. 更安全
-
which正在查找 PATH。crontab是每个用户,可以有自己的 PATH 或大部分为空的 PATH