在 Linux 系统管理中,自动化 Bash 脚本对于执行安装应用程序和监控系统日志等任务至关重要。Cron 是一个定时任务调度器,用于在特定时间间隔运行任务;而 Systemd 作为服务管理器,负责在 Linux 中通过服务配置文件管理应用程序。
本文将介绍如何在 Linux 上使用 Cron 和 Systemd 自动化 Bash 脚本,以自动执行和管理系统任务。
先决条件
在开始之前,需要准备一台安装了 Ubuntu 操作系统的服务器
选择服务器提供商
为了本教程的演示,我将以一个具体的云服务提供商为例,展示如何进行操作。选择哪个提供商根据您的个人偏好和需求来决定。
以下步骤仅供参考,请根据实际需求选择配置。
购买云服务器
本示例中,我们选择了香港作为服务器区域。
点击 云产品 → 云服务器 → 立即购买
选择操作系统
在创建服务器实例时,选择 Ubuntu 24.04 作为操作系统。
连接到服务器
使用 X-shell 或您偏好的 SSH 客户端,通过远程用户名和密码连接到您的服务器。成功连接后,您将看到特定的欢迎信息,表明您已成功登录。
- 使用 SSH 以非 root 用户身份访问实例,并具有 sudo 权限。
- 安装 LAMP 堆栈。
创建 Bash 脚本
Bash 脚本支持多个命令和函数,定义了系统任务的运行方式。按照以下步骤创建新的 Bash 脚本来备份关键的 Web 应用程序文件,并监控系统日志中的错误。
切换到用户主目录。
cd
创建一个新的 log-monitor.sh
脚本。
nano log-monitor.sh
在 log-monitor.sh
文件中添加以下内容:
#!/bin/bash
LOG_FILE="/var/log/syslog"
ERROR_LOG="/opt/data/error_log.txt"
WARNING_LOG="/opt/data/warning_log.txt"
tail -F "$LOG_FILE" | while read line; do
if echo "$line" | grep -q "error"; then
echo "$line" >> "$ERROR_LOG"
elif echo "$line" | grep -q "warning"; then
echo "$line" >> "$WARNING_LOG"
fi
done
保存并关闭文件。
上述 Bash 脚本在 /opt/data
目录中创建 error_log.txt
和 warning_log.txt
文件,使用 while
循环从 /var/log/syslog
系统日志文件中筛选结果。脚本筛选结果,并在 /var/log/syslog
文件中每次显示新错误时写入相应的错误或警告文件。
创建另一个 backup.sh
脚本。
nano backup.sh
在文件中添加以下内容:
!/bin/bash
DB_USER="user"
DB_PASSWORD="new-password"
DB_NAME="mysql"
DB_BACKUP_DIR="mysql_backup"
WEB_FILES_DIR="web_backup"
mkdir -p "$DB_BACKUP_DIR"
mkdir -p "$WEB_FILES_DIR"
DATE=$(date +"%Y%m%d_%H%M%S")
mysqldump -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$DB_BACKUP_DIR/db_backup_$DATE.sql"
echo "MySQL backup completed: $DB_BACKUP_DIR/db_backup_$DATE.sql"
tar -czf "$WEB_FILES_DIR/web_backup_$DATE.tar.gz" /var/www/html
echo "Web application backup completed: $WEB_FILES_DIR/web_backup_$DATE.tar.gz"
保存并关闭文件。
上述 Bash 脚本使用 DB_...
变量连接 MySQL 数据库服务器。然后创建 mysql_backup
和 web_backup
目录以存储数据库和 Web 应用程序的备份。
将 Bash 脚本移动到系统级目录,如 /opt
。
$ sudo cp backup.sh log-monitor.sh /opt/
在所选的系统级目录下创建一个新的 data
目录。
$ sudo mkdir -p /opt/data
将目录权限更改为 777
,以允许所有用户写入文件。
$ sudo chmod 777 /opt/data
使用 Cron 自动化 Linux 上的 Bash 脚本
Cron 创建作业,您可以使用它来安排和自动运行 Bash 脚本。按照以下步骤自动化之前创建的 Bash 脚本,以每天自动备份 MySQL 数据库和 Web 应用程序文件。
打开 Crontab 编辑器。
当提示时选择您想要的文本编辑器编辑 Crontab 文件。例如,选择 1
选择 nano
文本编辑器。
crontab -e
在文件末尾添加以下指令。
0 2 * * * /opt/backup.sh
保存并关闭文件。
列出所有 Cron 作业并验证新的 Bash 脚本任务是否可用。
crontab -e
输出:
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 2 * * * ~/backup.sh
使用 Systemd 将 Bash 脚本作为系统服务自动化
Systemd 在启动时自动启动系统服务,并提供停止和重启服务的选项。按照以下步骤将之前创建的监控 Bash 脚本设置为新的系统服务,并使用 Systemd 管理服务。
创建一个新的系统服务文件,例如 logmonitor.service
。
$ sudo nano /etc/systemd/system/logmonitor.service
在 logmonitor.service
文件中添加以下内容。
[Unit]
Description= Automatic System Logs Monitoring and Filtering
After=network.target
[Service]
ExecStart=bash /opt/log-monitor.sh
Restart=always
[Install]
WantedBy=multi-user.target
保存并关闭文件。
上述服务配置在 /opt
目录中运行 log-monitor.sh
Bash 脚本,监控和过滤 /var/log/syslog
文件中的日志条目。
重新加载 Systemd 以应用服务文件更改。
$ sudo systemctl daemon-reload
启用新系统服务以在启动时自动启动。
$ sudo systemctl enable logmonitor.service
输出:
Created symlink /etc/systemd/system/multi-user.target.wants/logmonitor.service → /etc/systemd/system/logmonitor.service.
启动系统服务。
$ sudo systemctl start logmonitor
查看系统服务状态并验证其是否运行。
$ sudo systemctl status logmonitor
输出:
● logmonitor.service - Automatic System Logs Monitoring and Filtering
Loaded: loaded (/etc/systemd/system/logmonitor.service; enabled; preset: enabled)
Active: active (running) since Wed 2024-11-06 13:20:07 UTC; 11s ago
Main PID: 14293 (bash)
Tasks: 3 (limit: 1062)
Memory: 784.0K (peak: 1.5M)
CPU: 40ms
CGroup: /system.slice/logmonitor.service
├─14293 bash /opt/log-monitor.sh
├─14308 tail -F /var/log/syslog
└─14309 bash /opt/log-monitor.sh
Linux-server systemd[1]: Started logmonitor.service - Automatic System Logs Monitoring and Filtering.
运行以下命令模拟 /var/log/syslog
文件中的新错误和警告条目。
logger -p user.err "This is a simulated error log message from MySQL"
logger -p user.err "This is a simulated warning log message from Apache"
logger -p user.err "This is a simulated error log message from PHP"
logger -p user.err "This is a simulated Warning log message from MySQL"
列出 /opt/data
目录中的所有文件,并验证 error_log.txt
和 warning_log.txt
文件是否可用。
ls /opt/da
输出:
error_log.txt warning_log.txt
查看 error_log.txt
文件,并验证文件中仅包含错误条目。
ls /opt/data
结论
您已经使用 Cron 和 Systemd 在 Linux 服务器上自动化了 Bash 脚本。自动化 Bash 脚本允许您运行常见的系统管理任务,如备份和错误监控。要简化系统管理,请创建多个 Bash 脚本和 Cron 作业,并为每个脚本和 Cron 作业指定必要的命令。