skywing 大佬有话说 :
sh脚本直接执行返回结果正常,一使用crontab就不正常
本帖最后由 skywing 于 2022-12-1 21:44 编辑
#!/usr/bin/env bash
get_ip() {
new_ip=`dig domain.com +noall +answer | awk ‘{print $5}’`
old_ip=`iptables -L | grep dpt:443 | grep ACCEPT | awk ‘{print $4}’`
}
check_ip () {
get_ip
echo "the new ip is $new_ip"
echo "the old ip is $old_ip"
if [[ "${new_ip}" != "${old_ip}" ]]; then
iptables -I INPUT -s $new_ip -p tcp –dport 443 -j ACCEPT
iptables -D INPUT -s $old_ip -p tcp –dport 443 -j ACCEPT
echo "ip changed, update the ip."
else
echo "ip not change."
fi
}
check_ip
直接执行这个脚本,输出
the new ip is xxx
the old ip is xxx
ip not change.
一放到crontal里定时执行,输出
the new ip is xxx
the old ip is
ip changed, update the ip.
old_ip 直接返回空值yc002t
这是怎么回事呢?
HOH 大佬有话说 :
ipt在sbin里
lifetyper 大佬有话说 :
楼上应该是正解,这种脚本我都用绝对路径。
skywing 大佬有话说 :
HOH 大佬有话说 : 2022-12-1 21:44
ipt在sbin里
第一行写成 #/usr/sbin bash这个脚本就无法通过文件路径直接执行,提示如下错误
-bash: ./ip.sh: /usr/sbin: bad interpreter: Permission denied
必须前面使用 bash才能正常执行
为什么会报这个错误呢?
tiga 大佬有话说 :
skywing 大佬有话说 : 2022-12-1 21:54
第一行写成 #/usr/sbin bash这个脚本就无法通过文件路径直接执行,提示如下错误
-bash: ./ip.sh: /usr/sb …
看乐了
人家说的是 iptables 在 sbin
zxxx 大佬有话说 :
/usr/sbin/iptables …