2014-04-10 70 views
5

我有以下bash脚本来读取日志并检查暴力,然后使用iptables阻止违反IP。bash脚本命令不能在cron中工作

#!/bin/bash 
#blah blah run some commands to get the IP 
iptables -A INPUT -s $p -j REJECT --reject-with icmp-host-prohibited 
echo "BANNED $p FOR $COUNT ATTEMPTS" |wall 

我做了chmod 755.当我从终端运行命令它工作正常。但是,当我使用crontab -e作为root设置cronjob时,它会将IP和回声消息“BANNED ...”发送到墙上,但是没有任何内容添加到iptables列表中。

PS。我尝试了#!/bin/bash#!/bin/sh,但没有运气。

+0

为什么你需要添加iptables规则在cron,如果你想添加的iptables rulesand你想他们是持久的,你可以将它们添加到/ etc/sysconfig/iptables或rc.local –

+0

您需要正确设置您的PATH才能找到'iptables'。 –

+0

这将需要重新启动iptables服务是吗? –

回答

12

尝试提供iptables的完整路径例如

$ which iptables 
/sbin/iptables 

,比修改您的脚本像:\

#!/bin/bash 
#blah blah run some commands to get the IP 
/sbin/iptables -A INPUT -s $p -j REJECT --reject-with icmp-host-prohibited 
echo "BANNED $p FOR $COUNT ATTEMPTS" |wall 
+0

作品谢谢! –

0

请尝试以下解决方案应为你工作:

cat cronjob 
* * * * * /path/to/script.sh 

然后:

chmod +x cronjob 
chmod +x script.sh 

/etc/init.d/crond start #redhat based servers like centos 
/etc/init.d/cron start #debian based servers like ubuntu 

crontab cronjob 

注意:有时你需要输入iptables命令的完整路径,如果您的规则不会添加到/etc/sysconfig/iptables

+0

虽然这是一个更一般和有趣的解决方案,但我认为这不是cronjob配置上的问题,而是脚本的路径。 – fedorqui

+0

是的..脚本路径和iptables命令的路径可能是问题 – MLSC