Linux 计划任务和自动化完全指南


Linux 计划任务和自动化完全指南

基础介绍

概念定义

计划任务(Scheduled Tasks)是指在预定的时间或以特定的频率自动执行的任务。自动化(Automation)是指使用脚本或工具自动完成重复性或复杂的任务,从而提高效率和减少人为错误。

工作原理简图

1
2
3
4
5
6
+---------------------+     +---------------------+     +---------------------+
| 用户/系统管理员 | --> | 任务调度器 (cron) | --> | 执行的脚本/命令 |
+---------------------+ +---------------------+ +---------------------+
| | |
| 设置任务时间/频率 | 触发任务执行 | 执行任务逻辑 |
+------------------------+ +------------------------+

在Linux系统中的作用

计划任务和自动化在Linux系统中扮演着重要的角色,它们可以用于:

  • 系统维护:定期清理临时文件、日志文件备份等。
  • 数据备份:自动备份重要数据,防止数据丢失。
  • 监控:监控系统资源使用情况,及时发现并解决问题。
  • 应用部署:自动部署和更新应用程序。

常用命令

命令 参数 说明 使用频率
crontab -e, -l, -r 管理cron任务的命令。-e 编辑,-l 列出,-r 删除。 ★★★★
at -m, -d 用于一次性计划任务。-m 发送邮件,-d 删除。 ★★☆☆
batch 系统负载低时执行任务。 ★☆☆☆
systemctl start, stop, restart, status 用于管理systemd服务,可以用来启动、停止和重启定时任务服务。 ★★★☆
sleep number[s,m,h,d] 暂停指定的时间。s 秒,m 分钟,h 小时,d 天。 ★★★☆

⚠️ 高危操作警告: 使用 crontab -r 会删除所有cron任务,请谨慎操作。

示例代码

示例1:每天凌晨3点备份数据库

场景: 每天凌晨3点自动备份MySQL数据库到指定目录。

步骤:

  1. 创建备份脚本 /home/user/backup_db.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/bin/bash
    # 数据库用户名
    DB_USER="your_db_user"
    # 数据库密码
    DB_PASSWORD="your_db_password"
    # 数据库名称
    DB_NAME="your_db_name"
    # 备份目录
    BACKUP_DIR="/home/user/db_backups"
    # 备份文件名
    BACKUP_FILE="$BACKUP_DIR/db_backup_$(date +%Y%m%d).sql.gz"

    # 创建备份目录(如果不存在)
    mkdir -p "$BACKUP_DIR"

    # 执行备份
    mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" | gzip > "$BACKUP_FILE"

    # 打印备份信息
    echo "Database backup created: $BACKUP_FILE"
  2. 为脚本添加可执行权限:

    1
    chmod +x /home/user/backup_db.sh
  3. 编辑cron任务:

    1
    crontab -e

    添加以下行:

    1
    0 3 * * * /home/user/backup_db.sh
    • 0 3 * * * 表示每天凌晨3点执行。

预期输出:

每天凌晨3点,会在 /home/user/db_backups 目录下生成一个以日期命名的数据库备份文件。

示例2:每分钟检查网站状态

场景: 每分钟检查网站是否可用,如果不可用则发送邮件通知。

步骤:

  1. 创建检查脚本 /home/user/check_website.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
    # 网站URL
    WEBSITE_URL="https://www.example.com"
    # 收件人邮箱
    EMAIL="[email protected]"

    # 检查网站状态
    if curl -s --head --request GET "$WEBSITE_URL" | grep "HTTP/1.[01] 200 OK" > /dev/null; then
    echo "Website is up and running."
    else
    echo "Website is down!"
    echo "Website $WEBSITE_URL is down!" | mail -s "Website Down Alert" "$EMAIL"
    fi
  2. 为脚本添加可执行权限:

    1
    chmod +x /home/user/check_website.sh
  3. 编辑cron任务:

    1
    crontab -e

    添加以下行:

    1
    * * * * * /home/user/check_website.sh
    • * * * * * 表示每分钟执行。

预期输出:

每分钟检查一次网站状态,如果网站不可用,则会发送一封包含 “Website Down Alert” 的邮件到指定的邮箱。

Metadata

  • Tags: Linux, 计划任务, 自动化, cron, crontab, at, systemd, 脚本
  • Categories: 系统管理, 自动化运维

文章作者: 达朵
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 达朵 !
  目录