拓冰建站拓冰建站
首页 / 资讯中心 / 正文

没有 rpm 包照样装! 自动化任务——源码编译、自建仓库与计划任务三连击

Linux 命令行日课· 从零到得心应手的每日修行Day 01别再被命令行劝退了——Day 01终端、提示符与文本查看命令Day 02文件管理命令——创建、复制、移动、删除与链接Day 03求助、编辑与重定向——让 Linux 真正为你工作Day 04你的终端其实会编程——变量、环境与引号的艺术Day 05上Linux 的门禁系统——用户、组与密码管理Day 05下借力打力——su、sudo 提权与文件权限解密Day 06文件权限管理实战——从 chmod 到 chattr把权限锁明白Day 07进程管理与系统监控——ps、kill、jobs 到 top 全掌握Day 08系统服务管理与压力测试——从 systemd 到 stressDay 09远程登录与安全加固——SSH 从入门到不输密码Day 10即将更新Day 11网络管理、文件归档与跨机传输——nmcli、tar、scp、rsync 全掌握Day 12软件包管理——从 rpm 底层到 yum 神器再到源码编译安装Day 13源码安装实战、自建仓库与计划任务——at、crontab 到进程调度本篇Day 13源码安装实战、自建仓库与计划任务——at、crontab 到进程调度上一篇我们把软件包管理的常规武器讲完了——rpm查包装包、yum自动解决依赖、配仓库指向下载源。但你有没有想过两个更深的问题第一如果根本没有现成的 rpm 包怎么办很多软件官方只放出一坨源代码.tar.gz你得自己编译安装。上篇只提了一嘴./configure make make install今天实战两个完整案例——nginx 和 cmatrix从头到尾走一遍。第二装完软件之后呢Linux 系统不是装好就完事了——你得让它在指定时间自动执行任务比如每天凌晨三点备份数据库你得理解为什么有些进程能抢到更多 CPU 时间。今天的内容分四大块。前两块是上篇软件包管理的延续和深化源码编译安装 nginx 并注册为系统服务、自建 YUM 仓库让别人从你这里装软件。后两块是两个全新话题计划任务at 一次性 crontab 周期性和进程调度nice / renice / chrt。一、源码安装实战——以 nginx 和 cmatrix 为例上篇我们讲过源码安装的三板斧./configure→make→make install。当时只是提了一下概念今天拿两个真实软件走一遍完整流程。1.1 源码安装 nginxnginx 是什么Nginx读作 “Engine X”是一个高性能的 HTTP 和反向代理服务器。全球访问量前 1000 的网站里超过三分之一在用 Nginx。它既能直接对外提供网页也能作为中间人把请求转发给后面的应用服务器反向代理。官方地址https://nginx.org第一步安装编译依赖源码编译不是裸奔的——你需要编译工具gcc、make和功能库pcre 正则匹配、zlib 压缩。缺了任何一个./configure阶段就会报错。[rootcentos7 ~]# yum install -y gcc make pcre-devel zlib-devel依赖包作用gccC 语言编译器nginx 是 C 写的make构建工具根据 Makefile 自动化编译pcre-devel正则表达式库nginx 的 rewrite 规则依赖它zlib-devel压缩库nginx 的 gzip 压缩依赖它第二步下载 → 解压[rootcentos7 ~]# wget https://nginx.org/download/nginx-1.24.0.tar.gz[rootcentos7 ~]# tar -xf nginx-1.24.0.tar.gz[rootcentos7 ~]# cd nginx-1.24.0/tar -xf的-x是解包-f是指定文件名。解压完后务必cd进去——源码目录里藏着configure脚本那是整个安装的总控开关。第三步配置最关键的一步[rootcentos7 nginx-1.24.0]# ./configure --prefix/usr/local/nginx./configure做三件事检测系统环境——有没有 gccpcre 版本够不够生成 Makefile——告诉make怎么编译、安装到哪生成配置文件——比如 nginx 的nginx.conf头部信息--prefix/usr/local/nginx意思是所有 nginx 相关的文件都放在/usr/local/nginx下面——二进制程序放sbin/配置文件放conf/网页文件放html/日志放logs/。为什么要指定--prefix如果不指定默认会散落到/usr/local/的各个子目录里。指定之后想卸载直接rm -rf /usr/local/nginx就行干干净净。第四步编译并安装[rootcentos7 nginx-1.24.0]# make make installmake负责编译——把 C 源码变成二进制文件。make install负责安装——把编译好的文件复制到--prefix指定的目录。的意思是前面的命令成功了才执行后面的。如果make编译报错make install就不会执行避免装了半成品。验证一下[rootcentos7 nginx-1.24.0]# ls /usr/local/nginx/conf html logs sbin四个目录各司其职目录用途sbin/可执行程序nginx 启动命令conf/配置文件nginx.confhtml/默认网页根目录logs/访问日志、错误日志第五步配置环境变量[rootcentos7 ~]# export PATH$PATH:/usr/local/nginx/sbin/[rootcentos7 ~]# echo export PATH$PATH:/usr/local/nginx/sbin/ ~/.bashrc第一行把 nginx 的 sbin 目录追加到当前会话的 PATH。第二行写入~/.bashrc以后每次登录自动生效。为什么要配环境变量不配的话你得敲/usr/local/nginx/sbin/nginx才能启动配了之后直接敲nginx就行。PATH 就是 Shell 找命令的搜索路径。第六步启动、验证、停止# 启动[rootcentos7 ~]# nginx# 验证——curl 访问本地 80 端口grep 过滤出关键行[rootcentos7 ~]# curl -s http://localhost | grep ThankpemThank youforusing nginx./em/p# 优雅退出——处理完当前请求再停止[rootcentos7 ~]# nginx -s quitnginx 的四种管理信号命令作用nginx启动服务nginx -s quit优雅停止——处理完手上请求再退出nginx -s stop强制停止——直接杀进程不等待nginx -s reload重新加载配置文件——不停服更新配置quitvsstop前者是请把碗洗完再下班后者是现在就给我走人。生产环境用quit避免用户请求到一半被掐断。1.2 把 nginx 注册为系统服务到目前为止nginx 只能靠手动敲命令启停。万一服务器重启nginx 不会自动起来。我们可以把它注册为 systemd 服务让它享受systemctl start/stop/enable的待遇。# 复制 sshd 的服务文件当模板[rootcentos7 ~]# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/nginx.service[rootcentos7 ~]# vim /etc/systemd/system/nginx.service编辑成以下内容[Unit] DescriptionNginx server daemon [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/usr/local/nginx/sbin/nginx -s quit [Install] WantedBymulti-user.target关键字段解释Typeforkingnginx 启动后会分身出子进程父进程退出。systemd 需要知道这个行为否则会以为启动失败了。ExecStart-c指定配置文件路径WantedBymulti-user.target在多用户模式下自动启动即正常服务器运行级别# 让 systemd 重新读取服务文件[rootcentos7 ~]# systemctl daemon-reload# 开机自启 立即启动[rootcentos7 ~]# systemctl enable nginx.service --now搞定。现在 nginx 和 sshd 一样可以用systemctl status nginx查看状态了。1.3 源码安装 cmatrix——黑客帝国代码雨cmatrix 是什么Cmatrix 是一款 Linux 环境下的屏保软件效果就是《黑客帝国》里经典的绿色代码雨。跑在终端里瞬间科技感拉满。项目地址https://github.com/abishekvashok/cmatrix安装流程# 安装依赖[rootcentos7 ~]# yum -y install gcc make autoconf ncurses-devel# 下载内网环境使用课程服务器地址[rootcentos7 ~]# wget http://192.168.50.200/class/course-materials/softwares/stage01/cmatrix-1.2.tar.gz# 解压[rootcentos7 ~]# tar -xf cmatrix-1.2.tar.gz# 配置[rootcentos7 ~]# cd cmatrix-1.2/[rootcentos7 cmatrix-1.2]# ./configure --prefix/usr/local/cmatrix# 编译并安装[rootcentos7 cmatrix-1.2]# make make install多了一个依赖ncurses-devel——这是终端图形库cmatrix 在终端里画代码雨全靠它。autoconf是用来生成configure脚本的工具。使用# 配环境变量[rootcentos7 ~]# export PATH$PATH:/usr/local/cmatrix/bin# 查看帮助[rootcentos7 ~]# cmatrix --help关键选项选项作用-b部分字符加粗-B全部字符加粗-u N滚动速度0~10默认 4数字越小越快-C color颜色green/red/blue/white/yellow/cyan/magenta/black-s屏保模式按任意键退出来玩几个组合# 默认效果绿色代码雨[rootcentos7 ~]# cmatrix# 红色加粗、超快速[rootcentos7 ~]# cmatrix -b -u 3 -C red隐藏技巧运行时变色和调速启动 cmatrix 之后不需要退出重新运行直接在键盘上操作变色——按shift 数字键颜色键位对应红色!Shift1绿色Shift2黄色#Shift3蓝色$Shift4洋红色%Shift5青色^Shift6白色Shift7黑色)Shift8调速——按数字键0~9随时改变代码下落速度。这俩技巧面试的时候慎用——面试官可能会觉得你装过头了。但自己玩确实很爽。二、自建 YUM 仓库——让别人从你这里装软件Day 12 我们讲了怎么配置 yum 仓库指向阿里云镜像站。那如果你们公司内网环境不能访问外网或者你想把公司常用的软件包集中管理怎么办自己建一个仓库。2.1 自建仓库完整流程整体分四步准备软件包 → 创建仓库索引 → 发布仓库 → 客户端配置第一步准备软件包[rootserver ~]# mkdir rpms[rootserver ~]# cd rpms# 下载软件包及其所有依赖只下载不安装[rootserver rpms]# yum install --downloadonly --downloaddir . vim open-vm-tools vsftpd lrzsz bash-completion nginx httpd mariadb-server--downloadonly只下载 rpm 包到本地不安装。--downloaddir .指定下载到当前目录。然后把下载好的包移动到 nginx 的网页目录因为我们要用 nginx 对外提供仓库服务[rootserver ~]# mkdir /usr/local/nginx/html/tools[rootserver ~]# mv rpms /usr/local/nginx/html/tools/Packages第二步创建仓库索引光有一堆 rpm 包不行yum 需要知道这个仓库里有哪些包、每个包的版本和依赖关系。这个索引由createrepo命令生成。[rootserver ~]# yum install -y createrepo# 扫描 Packages 目录生成 repodata/ 索引[rootserver ~]# createrepo /usr/local/nginx/html/tools/执行完你会发现多了一个repodata/目录里面就是仓库的元数据文件。yum 客户端就是靠读这些文件知道能装什么包的。第三步用 nginx 发布仓库编辑 nginx 配置打开文件列表功能[rootserver ~]# vim /usr/local/nginx/conf/nginx.conf在http块中加一行http { autoindex on; # 浏览器访问时显示文件列表 ...... } [rootserver ~]# systemctl reload nginxautoindex on的作用当你用浏览器访问http://服务器IP/tools/时会看到一个文件清单页面而不是 404。第四步客户端配置切换到客户端机器# 1. 备份原有仓库配置[rootclient ~]# mkdir /etc/yum.repos.d/old[rootclient ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/old# 2. 新建仓库配置指向我们自建的仓库[rootclient ~]# cat EOF /etc/yum.repos.d/tools.repo[tools]namecentos7 tools from server.zyf.cloudbaseurlhttp://server.zyf.cloud/tools/enabled1gpgcheck0EOF# 3. 验证[rootclient ~]# yum install -y httpd字段说明enabled1启用此仓库gpgcheck0跳过 GPG 签名校验自建仓库通常没签名baseurl指向我们刚用 nginx 发布出去的地址。2.2 同步远程仓库有时候你想把整个远程仓库的内容搬到本地——比如阿里云的 EPEL 源、或者公司服务器的 tools 仓库。用reposync一键搞定。# 同步 tools 仓库的全部包和元数据到本地 tools 目录[rootclient ~]# reposync --repoidtools# 同步完再重建一次索引保证本地可用[rootclient ~]# createrepo tools[rootclient ~]# ls tools/Packages repodatareposync属于yum-utils包。它的典型使用场景内网机器不能上外网你在一台能上外网的机器上reposync拉下整个仓库然后刻盘/U 盘拷进内网。三、计划任务——让 Linux 到点自动干活手动敲命令是人找事计划任务是事找人。到点了系统自动帮你执行不用你盯着。Linux 计划任务分两大类一次性到某个时间点执行一次用at周期性每隔一段时间重复执行用crontab3.1 一次性计划任务atatd 服务at命令依赖后台服务atdat daemon。先确认服务在跑[rootcentos7 ~]# yum install -y at[rootcentos7 ~]# systemctl status atd# 输出应包含 Active: active (running) 和 enabled基本用法at时间表达式输入命令后按CtrlD结束。来看几个例子例15 分钟后执行[rootcentos7 ~]# at now 5 minutesatechohello world/tmp/hello.log atEOTjob1at Wed Dec2117:09:002022EOT是你按CtrlD时自动出现的标记。输错了按CtrlBackspace删除。例2从脚本文件读取命令如果要执行的命令很多一行一行敲容易出错写成脚本用重定向喂给at[rootcentos7 ~]# vim myscript.sh#!/bin/bashdate/tmp/myscript.logechohello myscript/tmp/myscript.log# 方法一输入重定向[rootcentos7 ~]# at now 5 minutes myscript.sh# 方法二-f 指定文件[rootcentos7 ~]# at now 100 minutes -f myscript.sh时间表达方式at的时间表达非常灵活——可以写绝对时间也可以写相对时间表达式含义now 5 minutes5 分钟后now 3 hours3 小时后teatime tomorrow明天下午 4 点teatime 16:00noon 4 days4 天后的中午 12 点5pm august 3 20262026 年 8 月 3 日下午 5 点02:00 pm今天下午 2 点15:43今天 15:43完整时间规则参考/usr/share/doc/at/timespec管理任务队列# 查看待执行任务[rootcentos7 ~]# at -l # 或 atq1Wed Dec2117:09:002022a root2Wed Dec2117:10:002022a root# 查看某个任务的详细内容[rootcentos7 ~]# at -c 1# 删除任务[rootcentos7 ~]# at -d 1 # 或 atrm 1atd提供 26 个队列a ~ z字母越靠后优先级越低。默认用 a 队列可以用-q指定[rootcentos7 ~]# at -q b now 5 minutes -f myscript.sh[rootcentos7 ~]# at -l -q b # 只看 b 队列的任务控制谁能用 at两个文件决定权限文件作用/etc/at.allow白名单——存在时只有名单里的用户能用 at/etc/at.deny黑名单——allow 不存在时名单里的用户禁止用 at默认只有空的/etc/at.deny意味着所有用户都能用。3.2 用户周期性计划任务crontabat是一次性的crontab是重复的。比如每天凌晨 3 点备份数据库“每周一上午 9 点发周报”。crond 服务[rootcentos7 ~]# systemctl status crond# 默认开机自启一般不需要额外操作crontab 命令速查命令作用crontab -l查看当前用户的计划任务crontab -e编辑计划任务默认 vicrontab -r删除所有计划任务慎用crontab -u zyf -eroot 编辑 zyf 用户的任务crontab filename从文件导入任务替换当前所有任务默认编辑器由EDITOR环境变量控制export EDITORvim后再crontab -e就会用 vim。crontab 时间表达式核心语法一条 cron 任务由 6 个字段组成分钟 小时 日期 月份 星期 命令五个时间字段的语法规则符号含义示例*所有可能值* * * * * 每分钟N精确数字0 9 * * * 每天 9:00N-M范围9-17 9 点到 17 点N,M列表1,15,30 第 1、15、30 分钟*/N每隔 N*/5 每隔 5 分钟星期字段0 和 7 都表示周日1~6 表示周一到周六。经典示例# 每年 2 月 2 日上午 9 点执行备份0922* /usr/local/bin/yearly_backup# 7 月的每个周五上午 9 点到下午 4 点之间每 5 分钟报时一次*/59-16 * Jul5echoChime# 每个工作日周一到周五午夜前 2 分钟执行日报5823* *1-5 /usr/local/bin/daily_report# 每个工作日上午 9 点发邮件给老板09* *1-5mutt-sChecking inbossexample.com % Hi boss, just checking in.最后一个例子里%的作用crontab 中%是特殊字符表示后面的内容是命令的标准输入。这里Hi boss, just checking in.会作为 mutt 邮件的正文。实战创建一个 cron 任务[zyfcentos7 ~]$exportEDITORvim[zyfcentos7 ~]$crontab-e# 添加一行*/22,6-23 * * *date/tmp/date.log这条规则的意思是在 2 点、6~23 点这些时间段内每 2 分钟往/tmp/date.log追加一条时间戳。# 监控日志输出[zyfcentos7 ~]$tail-f/tmp/date.log2022年12月21日 星期三21:02:01 CST2022年12月21日 星期三21:04:01 CST......tail -f会持续追踪文件末尾的新增内容CtrlC退出。3.3 系统周期性计划任务除了用户自己的 crontab系统本身也有很多周期性任务要跑——比如日志轮转、临时文件清理。这些由系统级的 cron 配置管理。/etc/crontab和用户 crontab 的区别多了一个以谁的身份执行的字段。[rootcentos7 ~]# cat /etc/crontabSHELL/bin/bashPATH/sbin:/bin:/usr/sbin:/usr/binMAILTOroot# 格式分 时 日 月 周 用户 命令# * * * * * user-name command to be executed用户 crontab 的任务以自己的身份执行系统 crontab 可以指定任意用户。/etc/cron.d/推荐把自定义的系统级 cron 任务放在/etc/cron.d/目录下而不是直接改/etc/crontab。原因/etc/crontab可能在软件包更新时被覆盖。[rootcentos7 ~]# ls /etc/cron.d/0hourly raid-check sysstat# 例0hourly 定义了每小时运行 run-parts /etc/cron.hourly[rootcentos7 ~]# cat /etc/cron.d/0hourly01 * * * * root run-parts /etc/cron.hourlyrun-parts是一个工具命令会按顺序执行指定目录下的所有可执行脚本。/etc/anacrontab——关机期间的补作业机制如果服务器在凌晨 3 点计划执行备份的时间关机了呢anacron 就是来处理这种错过的[rootcentos7 ~]# cat /etc/anacrontabRANDOM_DELAY45# 随机延迟最多 45 分钟避免扎堆执行START_HOURS_RANGE3-22# 只在 3:00~22:00 之间执行# 周期天数 延迟分钟 标识符 命令15cron.dailynicerun-parts /etc/cron.daily725cron.weeklynicerun-parts /etc/cron.weekly monthly45cron.monthlynicerun-parts /etc/cron.monthly三个目录对应三种周期目录执行频率典型内容/etc/cron.daily/每天日志轮转logrotate/etc/cron.weekly/每周数据库维护/etc/cron.monthly/每月大扫除类任务四、进程调度——谁先用 CPU谁等着前面我们学会了让任务定时跑。现在看另一个维度当多个进程同时争抢 CPU 时谁先跑、谁能跑更久4.1 为什么需要调度器你的机器可能只有 4 个 CPU 核心但同时在跑的进程有几百个。内核的进程调度器负责切蛋糕——决定哪个进程获得 CPU 时间。调度器有两个核心原则按时间片轮转每个进程跑 10~20ms 就换人保证谁都饿不死按优先级调度重要的事情多分配 CPU 时间不重要的少分配调度器分两大类进程调度器 ├── 实时调度器RT——系统关键进程获取 CPU 能力强 │ ├── SCHED_RR → 轮询调度同优先级轮流来 │ └── SCHED_FIFO → 先入先出一直跑到阻塞或被更高优先级抢占 │ └── 非实时调度器 —— 普通用户进程获取 CPU 能力弱 ├── SCHED_NORMAL (SCHED_OTHER) → 默认标准时间共享 ├── SCHED_BATCH → 批处理适合长时间跑的计算任务 └── SCHED_IDLE → 优先级比 nice 19 还低纯空闲时跑关键结论优先级最低的实时进程也比优先级最高的非实时进程更霸道。实时进程也不能太霸道——内核有两个参数限制它kernel.sched_rt_runtime_us默认 0.95 秒和kernel.sched_rt_period_us默认 1 秒意思是每秒至少留 0.05 秒给普通进程保证 SSH 还能连得上。4.2 nice 和 renice——调整非实时进程优先级对于使用SCHED_NORMAL默认调度策略的普通进程咱们用nice 值来标记优先级。nice 值范围-20 ~ 19nice 值越高 → 优先级越低 → CPU 资源越少越nice越谦让nice 值越低 → 优先级越高 → CPU 资源越多越不nice越霸道记忆技巧nice “友好程度”。你对别人越好nice 值越高就越把资源让给别人。查看 nice 值用 top用 ps[zyfcentos7 ~]$ps-opid,nice,command PID NI COMMAND527510-bash557420md5sum /dev/zero默认情况下子进程继承父进程的 nice 值通常为 0。nice 命令——以指定优先级启动程序# 默认 nice 值 10 启动[zyfcentos7 ~]$nicemd5sum /dev/zero[zyfcentos7 ~]$ps-opid,nice,command PID NI COMMAND5574210md5sum /dev/zero# 指定 nice 值[zyfcentos7 ~]$nice-n5md5sum /dev/zero普通用户只能设正数 nice 值只能更谦让不能更霸道# 尝试设负数 → 权限拒绝[zyfcentos7 ~]$nice-n-2md5sum /dev/zeronice: cannotsetniceness: Permission denied# 进程最终还是以 nice 0 启动的root 没有这个限制——正负随便设。renice 命令——修改已运行进程的优先级# 把 PID 55782 的 nice 值改为 2[zyfcentos7 ~]$renice-n25578255782(process ID)old priority0, new priority2普通用户用renice只能升高nice 值降低优先级不能降低。root 可以双向调整# 普通用户尝试降低 nice → 被拒[zyfcentos7 ~]$renice-n-255782renice: failed tosetpriorityfor55782: Permission denied# root 出手[rootcentos7 ~]# renice -n -2 5578255782(process ID)old priority2, new priority-24.3 chrt——玩转实时调度nice只能调整普通进程的优先级。对于实时进程要用chrt。查看实时优先级范围[rootcentos7 ~]# chrt -mSCHED_OTHER min/max priority:0/0# 非实时优先级只有 0SCHED_FIFO min/max priority:1/99# 实时 FIFO1~99SCHED_RR min/max priority:1/99# 实时轮询1~99SCHED_BATCH min/max priority:0/0 SCHED_IDLE min/max priority:0/0注意SCHED_OTHER的优先级显示为 0/0意思是它不用实时优先级这套体系而是用 nice 值-20~19来表示。不要搞混。chrt 实战# 以 SCHED_RR 策略、实时优先级 5 启动进程[rootcentos7 ~]# chrt -r 5 md5sum /dev/zero [1]56225[rootcentos7 ~]# ps -o pid,cls,rtprio,command 56225PID CLS RTPRIO COMMAND56225RR5md5sum /dev/zero# CLSRRSCHED_RRRTPRIO5# 修改换成 SCHED_FIFO优先级提到 10[rootcentos7 ~]# chrt -f --pid 10 56225[rootcentos7 ~]# ps -o pid,cls,rtprio,command 56225PID CLS RTPRIO COMMAND56225FF10md5sum /dev/zero# CLSFFSCHED_FIFORTPRIO10# 降级回普通调度策略[rootcentos7 ~]# chrt -o --pid 0 56225[rootcentos7 ~]# ps -o pid,cls,rtprio,command 56225PID CLS RTPRIO COMMAND56225TS - md5sum /dev/zero# CLSTSSCHED_OTHERRTPRIO 显示 -chrt只能 root 用——普通用户不能把进程设为实时调度否则一个普通程序就能把系统卡死。五、今日总结今天的内容是 Day 12 软件包管理的进阶篇加上两个全新的系统管理话题。源码安装掌握了./configure --prefix路径→make→make install的完整流程并实战了 nginx 和 cmatrix 两个案例。记住先装依赖再编译这个铁律——缺依赖是源码安装 90% 的报错来源。自建仓库学会了用createrepo建索引、用 nginx 对外发布、用reposync同步远程仓库。内网环境必备技能。计划任务at管一次性crontab管周期性。crontab 的五个时间字段需要反复练习——分 时 日 月 周这个顺序刻在脑子里。进程调度理解了实时调度 vs 非实时调度的区别会用nice/renice调整普通进程的优先级用chrt玩转实时进程。下一篇预告继续深入系统管理——进程间的通信与协作。启动周期性任务服务同时开启开机自启并查看状态[rootbackup ~ 22:00:05]# systemctl enable crond --now[rootbackup ~ 22:00:27]# systemctl status crond安装同步服务软件同时db1、db2和storage3个节点也同步安装rsync软件[rootbackup ~ 22:00:19]# yum -y install rsync[rootbackup ~ 22:02:57]# crontab -e新增两行58 22 * * * rsync -av rootstorage:/webapp /webapp58 23 * * * rsync -av rootdb1:/var/lib/mysql /webapp/mysql设置免密登录[rootbackup ~ 22:10:57]# mkdir -m 700 .ssh/[rootbackup ~ 22:11:40]# ssh-keygen -t rsa -N ‘’ -f .ssh/id_rsa[rootbackup ~ 22:11:51]# ssh-copy-id rootstorage[rootbackup ~ 22:13:16]# ssh-copy-id rootdb1[rootbackup ~ 22:13:30]# ssh-copy-id rootdb2#验证免密登录[rootbackup ~ 22:13:34]# ssh rootdb1Last login: Mon Aug 17 21:54:23 2026 from 10.1.8.1验证同步效果[rootbackup ~ 22:15:45]# rsync -av rootstorage:/webapp /webappreceiving incremental file listwebapp/webapp/blog/webapp/blog/wordpress/webapp/blog/wordpress/index.php…
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门