温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何编写服务器运维Shell脚本

发布时间:2026-09-08 09:13:43 来源:亿速云 阅读:101 作者:小樊 栏目:系统运维

编写服务器运维 Shell 脚本,核心目标是自动化、可监控、可复用、安全。下面我从思路 → 基础结构 → 常见场景示例 → 编写规范与技巧四个方面系统讲一下。


一、编写前的思路(很重要)

在动手写脚本前,先明确:

  1. 脚本解决什么问题

    • 启停服务?
    • 日志清理?
    • 磁盘监控?
    • 自动备份?
  2. 运行环境

    • Linux 发行版(CentOS / Ubuntu)
    • Shell 类型(推荐 #!/bin/bash
    • 是否有 root 权限
  3. 执行方式

    • 手动执行
    • cron 定时任务
    • 被其他脚本调用

二、一个标准的 Shell 脚本结构

#!/bin/bash

# 脚本说明
# 功能:服务器磁盘空间检查
# 作者:xxx
# 日期:2026-01-15

set -euo pipefail

# 变量定义
THRESHOLD=80
LOG_FILE="/var/log/disk_check.log"

# 函数定义
check_disk() {
    local usage
    usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ "$usage" -gt "$THRESHOLD" ]; then
        echo "$(date) 磁盘使用率过高: ${usage}%" >> "$LOG_FILE"
    fi
}

# 主逻辑
main() {
    check_disk
}

main "$@"

三、常见运维脚本示例

1️⃣ 服务器资源监控(CPU / 内存 / 磁盘)

#!/bin/bash

echo "==== $(date) ===="
echo "CPU 负载: $(uptime)"
echo "内存使用:"
free -h
echo "磁盘使用:"
df -h

2️⃣ 自动清理日志(定时任务常用)

#!/bin/bash

LOG_DIR="/var/log/myapp"
DAYS=7

find "$LOG_DIR" -name "*.log" -mtime +$DAYS -delete

配合 crontab:

0 2 * * * /opt/scripts/clean_log.sh

3️⃣ 服务存活检测并自动重启

#!/bin/bash

SERVICE="nginx"

if ! systemctl is-active --quiet "$SERVICE"; then
    echo "$(date) $SERVICE 未运行,尝试重启" >> /var/log/service.log
    systemctl restart "$SERVICE"
fi

4️⃣ 数据库自动备份

#!/bin/bash

BACKUP_DIR="/backup/mysql"
DATE=$(date +%F)
mysqldump -u root -p'password' dbname > "$BACKUP_DIR/db_$DATE.sql"

⚠️ 密码写脚本不安全,建议用 .my.cnf


5️⃣ 批量服务器执行命令(SSH)

#!/bin/bash

for ip in 192.168.1.10 192.168.1.11; do
    ssh root@$ip "uptime"
done

四、Shell 脚本编写规范与技巧

✅ 推荐做法

  • 使用 #!/bin/bash
  • 开启安全模式:
    set -euo pipefail
    
  • 变量加引号,防止空格问题
  • 使用函数拆分逻辑
  • 日志输出到文件
  • 脚本放在统一目录(如 /opt/scripts

❌ 常见错误

  • 直接用 rm -rf /
  • 忽略命令执行结果
  • 密码明文写死
  • 没有日志,出问题无法排查

五、进阶方向(如果你继续深入)

  • 使用 cron / systemd timer
  • 结合 mail / 钉钉 / 企业微信告警
  • ansible 替代复杂 Shell
  • bash + python 混合运维

如果你愿意,可以告诉我:

  • 你用的是 哪类服务器(Web / 数据库 / 微服务)
  • 想实现 什么具体功能

我可以直接帮你写一套可落地使用的脚本。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI