2014-04-10 110 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