解决 crontab iptables command not found (iptables 无法使用)的问题

crontab 是一个 Linux 定时任务工具,通常我们在写好一个脚本时如果需要定时运行,都会借助 crontab。今天老王在写好一个脚本时,测试时没有问题,但是当 crontab 定时执行时却报错:iptables command not found,本文分享下出现这个问题的原因和解决办法。

一、前言

写完脚本并完成测试后我就直接加入到 crontab 里去了:

*/5 * * * * /root/ip_block.sh > /dev/null 2>&1 &

结果发现 iptables 规则似乎没有添加成功,于是添加了日志文件记录:

*/5 * * * * /root/ip_block.sh >> /root/block.log 2>&1

结果发现报错:iptables command not found

其实看到了这个错误老王就想到应该是 bash 和 sh 的问题,因为之前老王出现过crontab 任务中 Shell 脚本 for 循环不生效的问题原因与解决。去网上搜了下,在使用 crontab 任务时,不仅仅是 iptables,很多 Linux 自带的包都会出现 command not found 的错误,自己在 shell 脚本或者控制台执行的好好的,但是一旦加入 crontab 里,就报错 command not found,导致这个错误的原因是 PATH,我们调试时,执行环境是 /bin/sh,而 crontab 的执行环境是默认环境变量。

二、解决办法

以 iptables command not found 错误为例分享下解决办法。

1、添加 PATH

在 shell 脚本的最上方添加声明:

PATH=/usr/sbin:/sbin:/usr/bin:/bin

这样就可以直接执行 iptables 了。

2、绝对路径执行命令

先用 which iptables 找到 iptables 路径(返回 /sbin/iptables),之后将 shell 脚本中的 iptables 均改成 /sbin/iptables 即可。

which iptables
/sbin/iptables

修改如下:

/sbin/iptables -A INPUT -s $p -j REJECT

相关推荐:《Linux 利用 crontab 实现定时任务格式与用法简介

赞(3)
关注我们
未经允许不得转载:老王博客 » 解决 crontab iptables command not found (iptables 无法使用)的问题

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址