Linux shell自动化跨境运维脚本
跨境运维到底需要什么样的Shell脚本
如果你手上有几台分布在不同国家的服务器,每台都要每天检查网络、清理日志、校准时区、备份数据,手动登录做一遍会累死人。
用Linux shell写一个自动化脚本,放到一台“管理机”上,通过SSH远程执行,就能统一搞定。
本文的脚本可以直接修改后用到你的环境,适合零基础用户依葫芦画瓢。
准备工作:服务器环境与脚本工具
你需要准备的东西不多:
- 一台可以SSH登录的Linux服务器(管理机),本地或者云都行。
- 目标服务器(可以有多台),全部开启SSH并配置好密钥登录(这样脚本就不用每次都输密码)。
- 管理机安装好sshpass或直接使用密钥文件。如果你不会配置密钥登录,参考文末避坑部分。
- 基本了解Linux命令:cd、ls、vi(或者nano),够用了。
写一个实用的跨境运维脚本(核心步骤)
下面是一个完整的脚本,命名为cross_ops.sh,包含了网络连通性检查、时区同步、日志清理和数据备份四个模块。
我会先给完整代码,再逐段解释。
#!/bin/bash
# cross_ops.sh - 跨境服务器自动化运维脚本
# 用法:./cross_ops.sh
# ---------- 配置区(按实际修改)---------
SERVERS=("192.168.1.10" "10.0.0.20" "172.16.0.5") # 目标服务器IP列表
SSH_USER="root" # SSH登录用户名
SSH_KEY="~/.ssh/id_rsa" # 密钥文件路径
LOG_DIR="/var/log/myops" # 本地日志存放目录
BACKUP_DIR="/backup" # 目标服务器上备份文件夹
DATE=$(date +%Y%m%d%H%M) # 时间戳
# ---------------------------------------
mkdir -p $LOG_DIR
for server in "${SERVERS[@]}"; do
echo "========== 开始处理 $server ==========" | tee -a $LOG_DIR/ops.log
# 1. 网络连通性检查
if ping -c 2 -W 3 $server &>/dev/null; then
echo "[$DATE] 网络连通:正常" | tee -a $LOG_DIR/ops.log
else
echo "[$DATE] 网络连通:失败,跳过后续操作" | tee -a $LOG_DIR/ops.log
continue
fi
# 2. 时区同步(强制设为Asia/Shanghai,你也可以改成其他)
ssh -i $SSH_KEY $SSH_USER@$server "timedatectl set-timezone Asia/Shanghai && ntpdate -u pool.ntp.org" 2>&1 | tee -a $LOG_DIR/ops.log
echo "[$DATE] 时区同步完成" | tee -a $LOG_DIR/ops.log
# 3. 日志清理(删除7天前的/var/log下*.log)
ssh -i $SSH_KEY $SSH_USER@$server "find /var/log -name '*.log' -mtime +7 -exec rm -f {} \;" 2>&1 | tee -a $LOG_DIR/ops.log
echo "[$DATE] 日志清理完成" | tee -a $LOG_DIR/ops.log
# 4. 数据备份(将/var/www压缩后放在/backup目录)
ssh -i $SSH_KEY $SSH_USER@$server "tar -czf ${BACKUP_DIR}/www_${DATE}.tar.gz /var/www" 2>&1 | tee -a $LOG_DIR/ops.log
echo "[$DATE] 数据备份完成(备份文件:www_${DATE}.tar.gz)" | tee -a $LOG_DIR/ops.log
echo "========== $server 全部操作完毕 ==========" | tee -a $LOG_DIR/ops.log
done
脚本逻辑很简单:在管理机上循环每一台服务器,先ping检查网络,通了才执行后续步骤。
每一步的输出都追加到本地日志文件,方便检查。
你可以根据自己需要修改备份路径、清理天数、时区等。
部署与定时自动执行
写好脚本后,把它放到管理机的某个目录(比如/opt/scripts/),然后设置crontab实现每天凌晨自动执行。
# 给脚本执行权限
chmod +x /opt/scripts/cross_ops.sh
# 编辑当前用户的crontab
crontab -e
# 添加下面一行(每天凌晨2点执行)
0 2 * * * /opt/scripts/cross_ops.sh >> /var/log/myops/auto_cron.log 2>&1
修改后保存退出,crontab会自动生效。
你可以用crontab -l查看当前计划任务。
避坑指南:跨境网络延迟、编码问题、权限问题
1. SSH密钥登录配置:如果不想每次输入密码,先在管理机生成密钥对(ssh-keygen -t rsa),然后用ssh-copy-id root@服务器IP把公钥传到目标服务器。
注意目标服务器的/root/.ssh/authorized_keys权限必须是600,否则会拒绝连接。
2. 跨境网络延迟:ping的超时时间设短一点(上面用-W 3),否则如果某台服务器延迟高,脚本会卡很久。
也可以改用timeout命令限制每步操作时间。
3. 字符编码:如果服务器系统语言不同,SSH执行中文文件名可能乱码。
建议备份路径使用英文,脚本中用LANG=en_US.UTF-8确保统一。
4. 日志路径权限:管理机上脚本创建的$LOG_DIR需要保证当前用户有写权限,否则日志写不进去。
如果crontab执行失败,先检查/var/log/myops是否存在以及权限是否正确。
验证脚本是否生效
手动运行脚本:
./cross_ops.sh
观察终端输出,也可以查看日志文件:
cat /var/log/myops/ops.log
你会看到每台服务器的状态记录。
如果某台服务器网络不通,会跳过后面的步骤,并在日志里标明。
对于定时执行,第二天检查/var/log/myops/auto_cron.log确认是否有错误输出。
你还可以登录到目标服务器,检查备份文件是否生成、日志是否已被清理。
如果你正在处理Linux shell自动化跨境运维脚本,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
这套脚本已经成为我日常管理10台跨境服务器的标配工具,希望对你也有帮助。