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台跨境服务器的标配工具,希望对你也有帮助。

分享到:
上一篇
Linux防火墙iptables完整规则:从零学会配置与排错
下一篇
Linux住宅主机低功耗内核调优
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意