5.20 automation 01 ---------------------------------------------------------------
【●】systemd
一、概述
1.systemd简介
●systemd是linux系统的一组基本构建块
●他提供了一个系统和服务管理器
●他作为PID 1 运行并启动系统的其余部分进程
●控制systemd的主要命令是systemctl
步骤一:熟悉systemctl常用命令
1)命令列表
[root@web1 ~]# systemctl #列出所有启动的服务
[root@web1 ~]# systemctl status <服务名称> #查看服务状态
[root@web1 ~]# systemctl start <服务名称> #启动服务状态
[root@web1 ~]# systemctl stop <服务名称> #关闭服务状态
[root@web1 ~]# systemctl restart <服务名称> #重启服务状态
[root@web1 ~]# systemctl enable <服务名称> #设置开机自启
[root@web1 ~]# systemctl enable --now <服务名称> #设置开机自启并启动
[root@web1 ~]# systemctl disable <服务名称> #禁止开机自启
[root@web1 ~]# systemctl enable <服务名称> #设置开机自启
[root@web1 ~]# systemctl is-active <服务名称> #查看是否激活
[root@web1 ~]# systemctl is-enabled <服务名称> #查看是否开启自启
[root@web1 ~]# systemctl reboot #重启计算机
[root@web1 ~]# systemctl poweroff #关闭计算机
步骤二:使用systemd管理Nginx服务
1)修改Unit文件来自定义systemctl控制的服务
[root@web1 ~]# cd /usr/lib/systemd/system
[root@web1 system]# ls httpd.service
[root@web1 system]# cp httpd.service nginx.service
[root@web1 system]# vim nginx.service
[Unit]
Description=nginx #描述信息
After=network.target remote-fs.target nss-lookup.target #域名相关服务启动之后再开启nginx
[Service]
Type=forking #由于nginx是多进程服务,要设置forKing
ExecStart=/usr/local/nginx/sbin/nginx #当执行systemctl start nginx 时,所执行的命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload #当执行systemctl reload nginx 时,所执行的命令
ExecStop=/bin/kill -s QUIT ${MAINPID} #当执行systemctl stop nginx 时,所执行的命令,-s QUIT 是发送退出信号,${MAINPID}是nginx的主进程号
[Install]
WantedBy=multi-user.target #支持开机自启
[root@web1 system]# systemctl daemon-reload #刷新
[root@web1 system]# systemctl start nginx #开启nginx
[root@web1 system]# curl 192.168.2.100 #检查结果
---------------------------------------------------------------
自动化运维
一、版本控制
1.版本库
●典型的客户/服务器系统
—版本库是版本控制的核心
—任意数量的客户端
—客户端通过写数据库分享代码
2.版本控制类型
●集中式版本控制系统 (SVN)
—开发者之间共用一个仓库
—所有操作需要联网
●分布式版本控制系统 (GIT)
—每个开发者都是一个仓库的完整克隆,每个人都是服务器
—支持断网操作
3.分布式版本控制
●GIT基本概念
—GIT仓库:
保存所有数据的地方
—工作区:
从仓库中提取出来的文件,放在磁盘上供你使用或修改
—暂存区:
就是一个文件,索引文件,保存了下次将提交的文件列表信息
●工作流程 3.commit提交Git仓库
1.Clone数据到本地 |<--------------暂存区
---------------------> | |
远程Git仓库 本地Git仓库 |2.修改后add提交暂存区
服务器 <--------------------- | |
4.push提交远程服务器 |-----------> 本地工作区
步骤一:部署Git服务器(192.168.4.20作为git服务器)
服务器
1)YUM安装Git软件。
[root@gitlab ~]# dnf -y install git #服务器安装git
2)初始化一个空仓库。
[root@gitlab ~]# mkdir /var/lib/git
[root@gitlab ~]# git init /var/lib/git/project --bare #创建空仓库,用来存储项目数据 已初始化空的 Git 仓库于 /var/lib/git/project/
步骤二:客户端测试(192.168.4.10作为开发人员的客户端主机)
使用git常用指令
指令 作用
clone 将远程服务器的仓库克隆到本地
config 修改git配置
add 添加修改到暂存区
commit 提交修改到本地仓库
push 提交修改到远程服务器
1) 使用clone指令克隆服务器仓库到本地。提示:默认会将仓库下载到本地的当前目录(当前目录在root家目录)!
[root@develop ~]# dnf -y install git #客户端安装git
[root@develop ~]# git clone 192.168.4.20:/var/lib/git/project
正克隆到 'project'...
.......
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.4.20' (ECDSA) to the list of known hosts.
root@192.168.4.20's password: #克隆git主机的资料,需要输入gitlab主机的密码
warning: 您似乎克隆了一个空仓库。
[root@develop ~]# ls #查看是否将仓库下载到了本地,名称为project
anaconda-ks.cfg project
[root@develop ~]# cd /root/project/ #进入仓库,重要步骤,以后操作仓库都需要进入仓库的状态
[root@develop project]# ls -A
.git
2) 修改git配置
[root@develop project]# git config --global user.name "abc" #定义客户端的用户名
[root@develop project]# git config --global user.email "abc@abc.com" #定义客户端的邮箱
[root@develop project]# cat ~/.gitconfig #检查结果
[user]
name = abc
email = abc@abc.com
3) 本地工作区对数据进行增删改查(必须要先进入仓库再操作数据)。
[root@develop project]# echo "abc001" > 001.txt
4) 将工作区的修改提交到暂存区。
[root@develop project]# git add . #将仓库有变化的文件提交到暂存区
5) 将暂存区修改提交到本地仓库。
[root@develop project]# git commit -m “001”#提交之前暂存区的数据永久保存到仓库
6) 将本地仓库中的数据推送到远程服务器(develop将数据推送到git)。
[root@develop project]# git push #将本地数据推送给git服务器
root@192.168.4.20's password: # 输入gitlab服务器root密码
7) 查看版本日志。
[root@develop project]# git log #查询完整日志
[root@develop project]# git log --pretty=oneline #精简日志
[root@develop project]# git log --oneline #最精简日志
[root@develop project]# git reflog #本机操作日志
[root@develop project]# git status
------------------------------------------------------------------
二、HEAD指针操作
HEAD指针,可以将仓库恢复到过去的状态(类似于虚拟机的快照)
1)HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。
2) 查看Git版本信息。
[root@develop project]# git reflog #首先查询日志可以看到第1列的随机字符串,该字符串定义了每次commit提交的数据状态
828094c (HEAD -> master, origin/master) HEAD@{0}: commit: 003
ea4db68 HEAD@{1}: commit: 002
75567ff HEAD@{2}: commit (initial): 001
3)移动HEAD指针,将数据还原到任意版本。
提示:当前HEAD指针为HEAD@{0},HEAD@{1}是上一次指针的位置。
[root@develop project]# git reset --hard ea4db68 #回到时间节点为ea4db68的数据状态
[root@develop project]# git reflog
ea4db68 (HEAD -> master) HEAD@{0}: reset: moving to ea4db68
828094c (origin/master) HEAD@{1}: commit: 003
ea4db68 (HEAD -> master) HEAD@{2}: commit: 002
75567ff HEAD@{3}: commit (initial): 001
[root@develop project]# cat 001.txt #查看文件是否为001
abc001
回复到过去的时间节点,找回数据思路:
1, git reflog 查看日志,找到旧数据所在时间节点
2、 git reset --hard xxxx 回到过去,xxxx是时间节点的记录
3, 把需要找回的数据,从仓库中拷贝到另外一个目录
4, git reset --hard xxxx 回到现在
5, 在之前的目录找回旧数据
--------------------------------------------
三、Git分支操作
1.Git分支
当项目内容比较多时,Git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响
2.常见的分支规范如下:
MASTER分支(MASTER是主分支,是代码的核心)。
DEVELOP分支(DEVELOP最新开发成果的分支)。
RELEASE分支(为发布新产品设置的分支)。
HOTFIX分支(为了修复软件BUG缺陷的分支)。
FEATURE分支(为开发新功能设置的分支)。
步骤一:查看并创建分支
1)查看当前分支。
[root@develop project]# git status #查看状态
位于分支 master
您的分支领先 'origin/master' 共 4 个提交。
(使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
[root@develop project]# git branch #查看分支,*代表目前所在分支
* master
2)创建分支。
[root@develop project]# git branch hotfix #创建名字为hotfix的分支(名字可以自定义)
[root@develop project]# git branch feature #创建feature分支
[root@develop project]# git branch #查看分支信息
hotfix
* master
步骤二:切换与合并分支
1)切换分支。
[root@develop project]# git checkout hotfix #切换到 'hotfix'分支
[root@develop project]# git branch
* hotfix
master
2)在新的分支上可以继续进行数据操作(增、删、改、查)。
[root@develop project]# echo "hotfix-001" > hotfix001.txt #创建属于hotfix分支的文件
[root@develop project]# git add . #提交到暂存区
[root@develop project]# git commit -m "hotfix001" #提交到本地仓库
3)再次切换到master分支下查看并添加数据
[root@develop project]# git checkout master #切换回默认分支
[root@develop project]# ls #默认master分支中没有hotfix分支中的数据
[root@develop project]# echo "master001" > master001.txt #在master分支下在添加数据
[root@develop project]# git add .
[root@develop project]# git commit -m "master001"
4)将hotfix修改的数据合并到master分支。
注意,合并前必须要先切换到master分支,然后再执行merge命令。
[root@develop project]# git checkout master
[root@develop project]# git merge hotfix #合并分支,进到文档中,直接保存退出,将hotfix分支的数据与当前分支合并
步骤三:删除仓库
重新在服务端创建空仓库
在客户端克隆空仓库
git clone 192.168.4.20:/var/lib/git/test
cd test/
echo "ABCD~~" > readme.txt
git add .
git commit -m "readme"
3. 分支中的特殊情况:
如果分别在不同分支,创建同名文件,内容不同,再进行合并时,会发生冲突,此时需要手工修改冲突文件,修改完之后,就可以解决冲突
git branch hotfix //创建新分支
git checkout hotfix //切换到新分支
echo xyz > abc.txt //创建文件
git add . //提交到暂存区
git commit -m "abc" //提交到本地仓库
git checkout master //切换到默认分支
echo abc > abc.txt //创建文件
git add . //提交到暂存区
git commit -m "abc" //提交到本地仓库
git merge hotfix //合并分支,失败,因为两个分支有同名文件,但内容不同
vim abc.txt //修改文件,保存退出后即可解决
git add . //提交到暂存区
git commit -m "abc+" //提交到本地仓库
使用ssh协议建立连接,实现免密通信
在develop下操作:
ssh-keygen //创建ssh秘钥
ssh-copy-id 192.168.4.20 //传递秘钥到4.20
git clone 192.168.4.20:/var/lib/git/test //克隆不需要密码
cd test //进入仓库
echo xyz > xyz //创建文件,然后提交
git add .
git commit -m "xyz"
git push //上传到服务器也无需密码
git remote -v //查看远程服务器名字与ip
git remote add tom 192.168.4.20:/var/lib/git/test //与新服务器关联,名字叫tom
echo test01 > test01.txt //创建测试文件
git add .
git commit -m "test01"
git push -u origin master //指定名为origin的远程服务器提交数据到master分支
git remote remove origin //删除名为origin的远程服务器
git remote -v
echo test02 > test02.txt //创建测试文件
git add .
git commit -m "test02"
git push -u tom master //指定名为tom的远程服务器提交数据到master分支