Post

自动化脚本

自动化脚本

备份文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 定义变量
backup_dir="/path/to/backup"
file_to_backup="/path/to/file.txt"

# 创建备份目录
mkdir -p "$backup_dir"

# 备份文件
backup_file="$backup_dir/$(date +%Y-%m-%d_%H-%M-%S)_file.txt"
cp "$file_to_backup" "$backup_file"

# 显示备份结果
if [ -e "$backup_file" ]
then
    echo "File backup succeeded: $backup_file"
else
    echo "File backup failed."
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

# 定义备份目录和目标服务器地址
backup_dir="/data/backup"
target_server="user@target-server:/backup"

# 备份 Web 服务器文件
web_dir="/var/www/html"
rsync -avz --delete $web_dir $backup_dir/web

# 备份应用程序文件
app_dir="/opt/myapp"
rsync -avz --delete $app_dir $backup_dir/app

# 将备份数据同步到目标服务器
rsync -avz --delete $backup_dir $target_server
解释

这个脚本会在指定的目录中创建一个新的备份文件,并将原始文件复制到该备份文件中。备份文件的文件名包括当前日期和时间,以确保每个备份文件都有唯一的名称。

你可以通过修改backup_dirfile_to_backup变量来自定义备份目录和要备份的文件路径。

当脚本执行完成时,它将会输出备份结果:如果备份文件成功创建,则显示成功消息及其文件名;否则,显示失败消息。

这只是一个基础的备份示例,你可以根据需要对其进行扩展和修改。例如,你可能希望增加一些错误检查或添加日志记录功能。

管理服务器

Shell 脚本可以用来管理服务器上的自动化任务,例如定时运行脚本、自动化部署应用程序、监控服务状态等。

下面是一个简单的 Shell 脚本示例,用于管理定时任务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash

# 添加一个定时任务到 crontab 文件中
add_cron_job() {
    local command="$1"
    local schedule="$2"

    # 将定时任务添加到 crontab 文件
    (crontab -l ; echo "$schedule $command") | crontab -
}

# 移除 crontab 中指定命令的定时任务
remove_cron_job() {
    local command="$1"

    # 从 crontab 文件中移除指定命令的定时任务
    crontab -l | grep -v "$command" | crontab -
}

# 显示当前系统所有定时任务
list_cron_jobs() {
    crontab -l
}

# 在每天凌晨 3 点执行 backup.sh 脚本
add_cron_job "/bin/bash /path/to/backup.sh" "0 3 * * *"

# 将 backup.sh 脚本从定时任务中移除
remove_cron_job "/bin/bash /path/to/backup.sh"

# 显示当前系统所有定时任务
list_cron_jobs

在这个脚本中,我们定义了三个函数:add_cron_job、remove_cron_job 和 list_cron_jobs。其中 add_cron_job 函数用于添加一个定时任务到 crontab 文件中,remove_cron_job 函数用于移除 crontab 中指定命令的定时任务,list_cron_jobs 函数用于显示当前系统所有定时任务。

在这个脚本中,我们添加了一个定时任务来每天凌晨 3 点执行 backup.sh 脚本。我们还可以使用 remove_cron_job 函数将该定时任务从 crontab 中移除。

需要注意的是,在实际使用中,还需要考虑一些其他因素,比如安全性、错误处理等问题,以确保自动化任务的可靠性和安全性。

自动化任务 Shell 监控文件系统

Shell 脚本可以用来监控文件系统,例如检查磁盘空间、监控日志文件等。下面是一个简单的 Shell 脚本示例,用于监控磁盘空间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash

# 检查磁盘空间使用情况
check_disk_space() {
    local threshold=90  # 磁盘空间阈值

    # 获取当前磁盘空间使用率(取整数部分)
    local usage=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')

    if [ "$usage" -gt "$threshold" ]; then
        echo "磁盘空间使用率超过阈值 ${threshold}%,当前使用率为 ${usage}%"
        return 1
    else
        echo "磁盘空间使用率正常,当前使用率为 ${usage}%"
        return 0
    fi
}

# 每隔 10 分钟检查一次磁盘空间
while true; do
    check_disk_space
    sleep 600
done

在这个脚本中,我们定义了一个函数 check_disk_space,用于检查磁盘空间使用情况,并将使用率与设定的阈值进行比较。如果使用率超过了阈值,则输出警告信息并返回错误码 1;否则输出正常信息并返回成功码 0。

然后,在主函数中,我们使用一个 while 循环来每隔 10 分钟调用 check_disk_space 函数来检查磁盘空间使用情况,并通过 sleep 命令实现定时检查。

需要注意的是,在实际使用中,还需要考虑一些其他因素,例如日志记录、警报通知等问题,以确保监控程序的可靠性和及时性。

docker build and push

以下是一个示例脚本,可以实现 Go 程序的 Docker 自动构建并推送到 Docker 仓库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

# 设置变量
IMAGE_NAME="your-image-name"
DOCKER_REPO="your-docker-repo"
TAG="latest"
DOCKERFILE_PATH="./Dockerfile"
CONTEXT="./"

# 构建镜像
docker build -t "${DOCKER_REPO}/${IMAGE_NAME}:${TAG}" -f ${DOCKERFILE_PATH} ${CONTEXT}

# 推送镜像到 Docker 仓库
docker push "${DOCKER_REPO}/${IMAGE_NAME}:${TAG}"

将以上脚本保存为名为 build-and-push.sh 的文件,在终端中运行此脚本即可自动构建和推送您的 Docker 镜像。请确保在脚本中替换 IMAGE_NAMEDOCKER_REPO 变量以反映您的实际情况。

This post is licensed under CC BY 4.0 by the author.