我编写了以下bash脚本,用于在服务器上更改UFW规则时创建文件。然后将使用Zabbix检查是否存在此文件。
#!/bin/bash
file="/tmp/ports.txt"
file_open="/tmp/open_ports.txt"
md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }')
file_diff="/tmp/ports_diff"
if [[ ! -f $file ]]; then
touch $file && sudo ufw status|grep ALLOW > $file
fi
if [ -f $file_diff ];then
rm $file_diff
fi
sudo ufw status|grep ALLOW > $file_open
if [ $md5_file != $md5_file_open ];then
touch $file_diff
fi
我发现有时文件不会被创建或删除,但是如果我第二次或第三次运行命令而没有任何进一步的改变,那就是。
请帮忙。
由于
答案 0 :(得分:1)
在第一次调用期间,文件“/tmp/ports.txt”和“/tmp/open_ports.txt”不存在。第一次运行后,应创建两个文件,diff为空。
此后,ufw status
会发生变化。
在下一次运行中,语句
md5_file=$(md5sum /tmp/ports.txt | awk '{ print $1 }')
md5_file_open=$(md5sum /tmp/open_ports.txt | awk '{ print $1 }')
将处理原始文件(没有更改状态),因此它们将对相同的文件进行操作。没有找到差异。
在此运行期间,$file_open
将填充新值,但在此更改后不会调用md5sum
函数。这种差异将会被制造出来。
下一次运行将以更改后的$file_open
开始,并找到差异。
当状态更改回原始值时,第一个在旧文件上运行md5,键入以查看差异而不删除diff文件。此运行还将使用新值写入$file_open
,将在下次运行时检测到。
解决方案:
将2 md5sum行移动到最后sudo
之后。