1、编写bash脚本
#!/bin/bash
set -e # 一旦有命令失败就退出脚本
# 配置
URL="http://10.0.2.101/eportal/InterFace.do?method=login"
PAYLOAD="-------------------------------"
# 定义请求头
HEADERS=(
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
"Accept-Encoding: gzip, deflate"
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
"Origin: ----------"
"Referer: ------------------"
"Accept-Language: zh-CN,zh;q=0.9"
"Cookie: ------------------------------------"
)
# 定义登录函数
login_function() {
echo "$(date): 尝试登录..."
response=$(curl -s -w "%{http_code}" -o /dev/null -X POST "$URL" "${HEADERS[@]/#/-H}" --data-raw "$PAYLOAD")
if [[ "$response" -eq 200 ]]; then
echo "$(date): 登录成功!"
else
echo "$(date): 登录失败,HTTP 状态码:$response"
fi
}
# 检查网络连接
check_network() {
ping -c 1 -W 1 8.8.8.8 &> /dev/null
}
# 初始化网络状态
last_network_status=false
echo "$(date): 脚本启动,开始监控网络状态..."
# 主循环
while true; do
current_network_status=$(check_network && echo true || echo false)
if $current_network_status; then
if ! $last_network_status; then
echo "$(date): 网络连接已恢复正常"
last_network_status=true
fi
else
echo "$(date): 网络连接不可用,尝试登录"
login_function
sleep 5
if check_network; then
echo "$(date): 登录成功,网络已恢复"
last_network_status=true
else
echo "$(date): 登录后网络仍然不可用,将继续尝试"
last_network_status=false
fi
fi
sleep 3 # 每 3 秒检查一次网络状态
done
2、确保它具有可执行权限
chmod +x /root/login_script.sh
3、实现开机自启
使用文本编辑器打开 /etc/rc.local
文件:
vi /etc/rc.local
在文件的末尾(exit 0
之前),添加以下行:
/root/login_script.sh
确保文件可执行:
chmod +x /etc/rc.local
后台运行
输出日志
nohup ./login_script.sh > /root/file_log.log 2>&1 &
不输出日志
nohup ./login_script.sh > /dev/null 2>&1 &
在这里:
> /dev/null
将标准输出重定向到/dev/null
,有效地丢弃所有输出。2>&1
将标准错误(文件描述符 2)也重定向到标准输出(文件描述符 1),即这样错误信息同样会被丢弃。&
表示在后台运行命令。
Comments NOTHING