自动化运维旨在通过工具或脚本减少手动操作,提升效率与一致性。以下是Ubuntu虚拟机常用的自动化运维方案:
Ansible是开源的自动化平台,通过SSH协议管理节点,无需在目标机器上安装代理,适合Ubuntu虚拟机的配置管理、应用部署与批量任务执行。
sudo apt update && sudo apt install ansible,完成安装后通过ansible 127.0.0.1 -m ping验证连通性。hosts文件定义目标虚拟机(如[webservers] 192.168.1.100 ansible_user=ubuntu ansible_private_key_file=~/.ssh/id_rsa),明确主机分组与连接参数。install_nginx.yml),定义安装Nginx的步骤:- hosts: webservers
become: yes # 获取root权限
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx service
service:
name: nginx
state: started
enabled: yes # 开机自启
ansible-playbook install_nginx.yml命令运行,Ansible会自动连接目标虚拟机并执行任务。Python是自动化运维的常用语言,通过paramiko(SSH连接)、fabric(远程执行)、psutil(系统监控)等库实现灵活的运维任务。
sudo apt install python3 python3-pip),创建虚拟环境(python3 -m venv myenv)隔离项目依赖。import paramiko
def check_service(host, user, key_path, service):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, username=user, key_filename=key_path)
stdin, stdout, stderr = ssh.exec_command(f'systemctl status {service}')
print(stdout.read().decode())
ssh.close()
check_service('192.168.1.100', 'ubuntu', '~/.ssh/id_rsa', 'nginx')
from fabric import Connection
def deploy_file():
conn = Connection(host='192.168.1.100', user='ubuntu', connect_kwargs={'key_filename': '~/.ssh/id_rsa'})
conn.put('local_file.conf', '/etc/nginx/conf.d/')
conn.run('systemctl reload nginx')
cron设置定时执行(如每天凌晨备份):编辑crontab -e,添加0 0 * * * /usr/bin/python3 /path/to/script.py。Shell脚本是Ubuntu原生支持的自动化方式,适合简单的日常任务(如备份、日志清理)。
vim/nano创建.sh文件(如backup.sh),内容如下:#!/bin/bash
SOURCE_DIR="/home/ubuntu/documents"
BACKUP_DIR="/home/ubuntu/backup"
TIMESTAMP=$(date +"%Y%m%d_%H%M")
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/backup_$TIMESTAMP.tar.gz $SOURCE_DIR
echo "Backup completed at $(date)" >> $BACKUP_DIR/backup.log
chmod +x backup.sh。./backup.sh(或通过cron定时运行,如0 2 * * * /home/ubuntu/backup.sh)。脚本编写需注重可读性、可维护性与复用性,以下是关键技巧:
i进入插入模式,Esc退出后输入:wq保存退出。Ctrl+O保存、Ctrl+X退出。gedit script.sh打开。#!/bin/bash),确保系统正确解析。VAR=value定义变量(避免空格),通过$VAR引用(如echo "Hello, $name")。#添加注释,说明脚本用途或关键步骤(如# This script backs up documents daily)。greet()函数):function greet() {
echo "Hello, $1!"
}
greet "Alice" # 调用函数
if [ -f "/path/to/file" ]; then
echo "File exists."
else
echo "File not found."
fi
for file in /home/ubuntu/*.txt; do
echo "Processing $file"
done
bash -x script.sh逐行执行并输出结果,定位语法或逻辑错误。./script.sh >> /var/log/script.log 2>&1),便于后续排查问题。通过上述方法,可在Ubuntu虚拟机上实现高效的自动化运维(如批量部署、配置管理)与灵活的脚本编写(如日常任务自动化),提升系统管理效率。