需求:随机修改nginx端口,一小时一次,然后发邮件通知


脚本思路,先在/root目录下建立个1.txt文件,随机填入4位数字

建个2.sh脚本,脚本内容如下:

#!/bin/bash
cd
b=`echo $RANDOM |cut -c 1-4`
echo $b >2.txt


上主脚本port_change.sh

#!/bin/bash
cd
c=`cat 1.txt`
d=`cat 2.txt`
netstat -lnpt|awk '{print $4}' |awk -F: '{print $2}' |grep -v "^$">3.txt
grep $d 3.txt
if [ $? -ne 0 ];then
    sed -i "/listen/s#$c#$d#g" /usr/local/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx -s reload
    echo $d >1.txt
/bin/sh /root/2.sh
echo "现在的端口是$d" |mail -s "端口" xxxxx@qq.com xxxxx@qq.com
fi


脚本思路如下:

先把nginx的端口修改成1.txt里的数字,也就是随机填入的数字,然后运行下2.sh,生成2.txt里的内容,也就是一个随机生成的数字,然后运行主脚本,这个脚本会先定义两个变量$c,$d,也就是1.txt和2.txt里数字,然后判断要修改的端口有没有跟现在打开的端口冲突,如果没有就将$d(新生成的随机数)替换掉$c(刚刚手工填的数字),然后将$d的数字重定向到1.txt里,也就是将$c的数字变成$d的数字,再运行2.sh脚本,重新生成新的$d,把这个脚本放在crontab里,一小时运行一次,下次运行的时候,又会用新生成的$d替换掉$c,这样就达到了自动随机修改nginx端口的目的


注:如果想用mail发邮件,需要先安装mailx这个软件,然后在/etc/mailx里定义下账号信息,like this:

set from=xxxxxxxxx@qq.com smtp=smtp.qq.com 

set smtp-auth-user=xxxxxxx@qq.com smtp-auth-password=xxxxxxx

set smtp-auth=login