linux - cron 权限有什么问题?

标签 linux bash cron

当我从命令行运行 BASH 脚本时,它会被执行。 当我尝试将其作为 cron 任务运行时,它失败了。通过异常的方法,我发现了一个问题。它在于“which iptables”命令返回一个空字符串。我尝试在“/sbin”目录中查找的所有程序都会发生这种情况。 示例:

# crontab -e
* * * * * /root/test.sh >> /root/test.log 2>&1

测试.sh

#!/bin/bash
IPT=$(which iptables);
echo ${IPT} >> /root/test.log

但是在test.log中写入了空字符串。 在 Ubuntu 16.04 和 Debian 8 上测试。

最佳答案

与权限无关。

which$PATH 中查找命令。 cron 脚本的路径有限,不包括 iptables,因此找不到它。

 $ /usr/bin/which iptables
/sbin/iptables
 $ PATH=/bin:/usr/bin /usr/bin/which iptables
 $ echo $?
1

当你的路径有限时,它将返回一个空字符串(在我的另一台机器上,它报告(/usr/bin:/bin)中没有 iptables,所以 YMMV)并以非零代码退出。

如果你执行类似 echo $PATH >>/root/test.log 的操作,你会看到 cron 的路径只有 /usr/bin/bin

您必须设置 $PATH 以包含 iptables 位置,或者在调用 iptables 时使用完整路径

关于linux - cron 权限有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60205232/

相关文章:

php - PHP : Delay instructions with CLI or Crontab and NOT Sleep()

linux - 同时在 crontab 中运行多个任务而不会延迟

linux - 创建一个 bash 别名以输入部分命令

bash - 从变量中去除前缀​​ - bash

c - 如何在 c 中正确使用 scandir()?

linux - 不能在 awk 命令中使用 unix $variable

bash - 在 bash 脚本中使用 ssh key

linux - Debian : Cron bash script every 5 minutes and lftp

mysql - 处理需要数据库 (MySQL) 密码的脚本的安全方法是什么?

php - 执行 gethostbyname 最多 1 秒