系统时间同步优化
时间配置查看
timedatectl
查看时区表
timedatectl list-timezones |grep Shanghai
设置上海时区
timedatectl set-timezone Asia/Shanghai #linux中中国时区为上海
开启网络时间同步
timedatectl set-ntp 1
手动同步时间服务器
ntpdate ntp1.aliyun.com
手动调整时间
timedatectl set-time '2021-12-18 12:03:23'
查看、修改系统时间
date date -s "2023-8-7 12:30:59" #修改时间为2023-8-7 12:30:59
系统远程连接优化
/etc/ssh/sshd_config 79 GGSSAPIauthentication no 115 UseDNS no
sed -i "79s#yes#no$g" /etc/ssh/sshd_config sed -i 's@#UseDNS yes@UseDNS no@g' /etc/ssh/sshd_config systemctl reload sshd
系统内核优化
vim /etc/sysctl.d/99-sysctl.conf 添加: #关闭ipv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 # 避免放大攻击 net.ipv4.icmp_echo_ignore_broadcasts = 1 # 开启恶意icmp错误消息保护 net.ipv4.icmp_ignore_bogus_error_responses = 1 # 关闭路由转发 net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 #开启反向路径过滤 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 #关闭sysrq功能 kernel.sysrq = 0 #core文件名中添加pid作为扩展名 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 #修改消息队列长度 kernel.msgmnb = 65536 kernel.msgmax = 65536 #设置最大内存共享段大小bytes kernel.shmmax = 68719476736 kernel.shmall = 4294967296 #timewait的数量,默认180000 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 #限制仅仅是为了防止简单的DoS 攻击 net.ipv4.tcp_max_orphans = 3276800 #未收到客户端确认信息的连接请求的最大值 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 #内核放弃建立连接之前发送SYNACK 包的数量 net.ipv4.tcp_synack_retries = 1 #内核放弃建立连接之前发送SYN 包的数量 net.ipv4.tcp_syn_retries = 1 #启用timewait 快速回收 net.ipv4.tcp_tw_recycle = 1 #开启重用。允许将TIME-WAIT sockets 重新用于新的TCP连接 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 #当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时 net.ipv4.tcp_keepalive_time = 30 #允许系统打开的端口范围 net.ipv4.ip_local_port_range = 1024 65000 #修改防火墙表大小,默认65536 net.netfilter.nf_conntrack_max=655350 net.netfilter.nf_conntrack_tcp_timeout_established=1200 # 确保无人能修改路由表 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 保存退出 sysctl -p 刷新生效
内核版本升级
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm yum --disablerepo=\* --enablerepo=elrepo-kernel repolist yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel* yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64 #重启 yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-tools.x86_64 #查看 rpm -qa | grep kernel yum remove -y kernel-3.10.0-1127.el7.x86_64
系统重要配置文件
#网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" #网卡类型:以太网 BOOTPROTO="static" #ip获取方式: dhcp 动态 static 静态 #网卡名 NAME="ens33" #设备名 DEVICE="ens33" #是否开机启动 ONBOOT="yes" #ip地址 IPADDR=192.168.8.10 #子网掩码 NETMASK=255.255.255.0 #网关 GATEWAY=192.168.8.2 #首选dns DNS1=8.8.8.8 备选dns DNS2=114.114.114.114
2.域名解析配置文件
cat /etc/resolv.conf #查看dns nameserver 8.8.8.8 #dsn格式
查看网关
route -n
3.自动挂载配置文件
扫描磁盘
#新添加磁盘时,使用此代码进行磁盘扫描 echo "- - -" >> /sys/class/scsi_host/host0/scan echo "- - -" >> /sys/class/scsi_host/host1/scan echo "- - -" >> /sys/class/scsi_host/host2/scan
磁盘配置
fdisk -l #查看目前已有磁盘 fdisk /dev/sdb #编辑磁盘 n #新建分区 w #保存并退出 mount /dev/sdb1 /data #挂载已经新建好的分区到文件夹 vim /etc/fstab #磁盘挂载配置文件 /dev/sdb1 /data xfs defaults 0 0 #永久挂载格式
系统运行级别
0 关机
poweroff.target 1 单用户
rescue.target 2 字符多用户,不常用,
multi-user.target 3 字符多用户,有网络,常用
multi-user.target 4 字符多用户,不常用
multi-user.target 5 图形
graphical.target 6 重启
reboot.target
切换运行级别
init 5 #切换至运行级别5
查看默认级别
systemctl get-default #查看当前所在运行级别
设置默认级别
systemctl set-default granhical/runlevel5 #设置开机默认级别
破解root密码
#重启过程中按e #在linux16行末尾添加 rd.break 按Ctrl+x mount -o remount,rw /sysroot chroot /sysroot echo "123" |password --stdin root touch .autorelabel exit exit
系统用户与组
/etc/passwd 用户信息文件
/etc/shadow 用户密码信息文件
/etc/group 用户组配置文件
创建用户
useradd zhangsan -u #指定用户的uid -g #指定用户的基本组 -G #指定附属组,可以有多个, 但是这些附属组必须是系统内已经存在的 -c #指定描述 -d #指定家目录 -M #不建立家目录 -s #指定shell -e #指定用户过期时间, 日期 -f #指定用户过期时间, 天数 #useradd -u 1010 zhangsan
针对已有用户修改属性
usermod 选项等同于useradd -L 锁定用户 -U 解除锁定 -l 改名
赋予密码
echo "123" |passwd --stdin zhangsan #指定zhangsan用户密码为“123”
删除用户
userdel zhangsan #删除zhangsan userdel -r zhangsan #删除关于zhangsan所有
组创建
groupadd cwd #创建cwd组 groupadd -g 1001 cwd #指定gid创建cwd
组删除
groupdel cwd #删除cwd组
添加删除成员到组
gpasswd -a cw1 cwd #添加 gpasswd -d cw1 cwd #删除 gpasswd -M cw1,cw2 cwd #同时添加多个用户
系统文件权限
r, w, x:可读、可写、可执行(r表示数字为4,w为2,x为1)
查看文件属性
ls -l test.txt #查看此文件信息 -rw-r--r-- 1 root root 0 12月 23 10:33 test.txt #权限 创建时间 创建用户等信息
第一栏代表这个文件的类型与权限 第一个字符代表这个文件是“目录、文件或链接文件等等”: [ d ]则是目录,例如上表文件名为“.config”的那一行; [ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行; [ l ]则表示为链接文件(link file); [ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备); [ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备) 接下来的rwx权限字符,以三个为一组: 第一组为“文件拥有者可具备的权限”; 第二组为“加入此群组之帐号的权限”; 第三组为“非本人且没有加入本群组之其他帐号的权限 第二栏表示有多少文件名链接到此节点 第三栏表示这个文件(或目录)的“拥有者账号” 第四栏表示这个文件的所属群组 第五栏表示这个文件的容量大小,默认单位是Bytes(字节) 第六栏表示这个文件的创建日期或者是最近修改日期 第七栏为这个文件的文件名
权限更改(所属组、拥有者、权限设置)
chgrp #更改文件所属组 chown #更改文件拥有者 chmod #设施文件权限 chmod +x test.txt #给此文件添加执行权限
系统安装软件方式
- rpm方式
优点:无需网络安装软件
缺点:无法解决软件依赖
rpm -ivh #安装 rpm -Uvh #升级安装,未装则安装 rpm -Fvh #更新安装,未装则不装 rpm -e #卸载(--nodeps忽略依赖,强制卸载) rpm -q #查看软件是否安装 rpm -ql #查看软件所有的安装文件列表 rpm -qc #查看软件的配置文件 rpm -qd #查看软件的模板文件 rpm -qf #查看命令文件由哪个软件所装
- yum方式
优点:自动解决软件依赖
缺点:无法定制化安装
yum install #全部安装 yum install package1 #安装指定的安装包package1 yum groupinsall group1 #安装程序组group1 yum update #全部更新 yum update package1 #更新指定程序包package1 yum check-update #检查可更新的程序 yum upgrade package1 #升级指定程序包package1 yum groupupdate group1 #升级程序组group1 yum info package1 #显示安装包信息package1 yum list #显示所有已经安装和可以安装的程序包 yum provides #文件名 查看文件属于哪一个包 yum list package1 #显示指定程序包安装情况package1 yum groupinfo group1 #显示程序组group1信息 yum search string #根据关键字string查找安装包 yum remove | erase package1 #删除程序包package1 yum groupremove group1 #删除程序组group1 yum deplist package1 #查看程序package1依赖情况 yum clean packages #清除缓存目录下的软件包 yum clean headers #清除缓存目录下的 headers yum clean oldheaders #清除缓存目录下旧的 headers yum clean, yum clean all (yum clean packages; yum clean oldheaders) #清除缓存目录下的软件包及旧的headers
仅下载
mkdir /http-rpm #创建目录 yum -y install --downloadonly --downloaddir=/http-rpm httpd #安装 cd /http-rpm #进入 yum -y localinstall *.rpm
- 案例:安装mysql
首先挂载mysql包
tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ cd /usr/local/ mv mysql-5.7.20-linux-glibc2.12-x86_64 mysql echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile source /etc/profile rm -rf /var/run/yum.pid yum remove -y mariadb-libs useradd mysql mkdir -p /usr/local/mysql/data chown -R mysql.mysql /usr/local/mysql/data /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld #以下为配置文件编写,复制即可 cat >> /etc/my.cnf << end [mysqld] user=mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock server_id=6 port=3306 [mysql] socket=/tmp/mysql.sock prompt=mysql> end #分隔符 cat >> /etc/systemd/system/mysqld.service << end [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 end systemctl restart mysql
linux磁盘分区
虚拟机扫描磁盘
echo "- - -" >> /sys/class/scsi_host/host0/scan echo "- - -" >> /sys/class/scsi_host/host1/scan echo "- - -" >> /sys/class/scsi_host/host2/scan fdisk -l
磁盘分区
fdisk /dev/sdb #以下为进入分区程序后的分区方式 p: 显示当前硬件的分区,包括没有保存的改动 n: 创建一个新的分区 d:删除一个分区 w: 保存并退出 q: 不保存退出 t: 修改分区类型(文件系统类型) l: 显示所支持的所有类型 mkfs.xfs /dev/sdb1 #格式化磁盘为xfs格式
磁盘挂载
mount /dev/sdb1 /data
网络附加存储
NFS网络文件系统
服务端配置
mkdir /data echo "/data *(rw,sync,no_root_squash)" > /etc/exports #对目录进行权限设置 systemctl start rpcbind nfs systemctl enable rpcbind nfs #所有网段都可访问 192.168.8.0/24 8.0都可以访问 #rw:读写访问 #sync:所有数据在请求时写入共享 #no_root_squash:用户具有根目录的完全管理访问权限
- 客户端配置
yum install -y nginx systemctl start nginx showmount -e 192.168.8.6 mount -t nfs 192.168.8.6:/data /usr/share/nginx/html echo "192.168.8.6:/data usr/share/nginx/htmo nfs defaults._netdev 0 0" >> /etc/fstab
iscsi
一个基于 TCP/IP 的协议,主要用于通过 IP 网络仿真 SCSI,从而为远程块存储设备提供数据传输和管理。 说白了,就是通过网络由专门的服务器提供存储管理,以实现数据的远程储存,便于数据的集中管理,从而 简化了数据复制、迁移和容灾。
服务端安装与配置
yum -y install targetd targetcli systecmtl start tatget systemctl enable target systemctl status target #当出现"ImportError: cannot import name ALUATargetPortGroup" yum install python-rtslib -y #进行此条命令 targetcli #进入配置模式 /backstores/block create server0.disk1 /dev/sdb /iscsi create iqn.2022-10.com.bdqn:disk1 /iscsi/iqn.2022-10.com.bdqn:disk1/tpg1/acls create iqn.2022-10.com.bdqn:client1 #此处配置的是客户端名 /iscsi/iqn.2022-10.com.bdqn:disk1/tpg1/luns create /backstores/block/server0.disk1 exit
客户端安装与配置
yum -y install iscsi-initiator-utils echo "InitiatorName=iqn.2022-10.com.bdqn:client1" > /etc/iscsi/initiatorname.iscsi systemctl start iscsi systemctl enable iscsi iscsiadm -m discovery -t st -p 192.168.8.10 -l #链接 lsscsi gdisk /dev/sdb partprobe /dev/sdb #识别新设备 cat /proc/partitions mkdir /iscsi mkfs.xfs /dev/sdb1 mount /dev/sdb1 /data echo "/dev/sdb1 /data xfs defaults,_netdev 0 0" >> /etc/fstab #永久挂载
系统启动流程和服务管理
1、BIOS(Basic Input Output System 基本输入输出系统 )加电自检、硬件初始化、引导操作系统
2、读取并且执行第一个开机设备中的MBR(Master Boot Record 主引导记录 )的 bootloader(grub程序:Grand unified bootloader 大统一启动加载器 )
3、依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序
boot loader主要功能如下: 提供选单:用户可以选择不同的开机项目 载入核心文件:直接指向可开机的程序区域来开始操作系统 转交其他loader:将开机管理功能转交给其他Loader负责
内核在Linux中的存放位置为/boot分区下,主要有2个文件要被加载: vmlinuz-3.10.0-514.el7.x86_64 内核文件 initramfs-3.10.0-514.el7.x86_64.img 虚拟文件系统
可以使用:lsinitrd 命令查看虚拟文件系统。 [root@localhost boot]# lsinitrd initramfs-3.10.0-957.el7.x86_64.img
如果是sysvinit启动程序(linux6版本) 4、内核启动init进程 5、系统初始化 6、init找到/etc/inittab文件,决定系统的运行级别(X) 7、触发相应的运行级别的事件,运行/etc/rcX.d下的脚本 8、执行/etc/rc.local文件,来到登录界面 9、输入用户名密码,进入到系统中
如果是systemd启动程序(Linux7版本) GRUB2相较于GRUB一代的提升:更健壮、可移植、更强大。支持 BIOS、uEFI和OpenFirmware,支持GPT和MBR分区表。支持非Linux 系统,如苹果HFS文件系统和Windows的NTFS文件系统 systemd 是 linux 系统中最新的初始化系统(init),它主要的设计目标 是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和 ubuntu 的 upstart 是竞争对手,但是时至今日 ubuntu 也采用了
4、在硬件驱动加载成功后,内核会主动呼叫systemd程序,并以 default.target流程开机 5、systemd执行sysinit.target初始化系统及basic.target准备操作系统 6、systemd启动multi-user.target下的本机与服务器服务 7、systemd执行multi-user.target下的/etc/rc.d/rc.local文件 8、systemd执行multi-user.target下的getty.target及登录服务 9、systemd执行graphical需要的服务
Init和Systemd的区别
init
1、启动时间长,init是串行启动,只有前一个进程启动完,才会启动下一个进程
2、启动脚本复杂,Init进程只是执行启动脚本,不管其他事情,脚本需要自己处 理各种情况,这往往使得脚本变得很长
3、由Linux内核加载运行,位于 /sbin/init ,是系统中第一个进程,PID永远为1
对于支持 service 的程序,安装的时候,会自动的在 /etc/init.d 目录添加一 个配置文件。当我们使用 service 控制程序时,比如执行开启httpd的服 务:service httpd start 。那么我们的 service 就会开启 /etc/init.d/httpd 配置文件里面指向的 /usr/sbin/httpd 可执行文件
systemd
1、按需启动服务,减少系统资源消耗。
2、尽可能并行启动进程,减少系统启动等待时间
3、由Linx内核加载运行,位于 /usr/lib/systemd/system,是系统中第一个进程, PID永远为1
对于支持 systemd 的程序,安装的时候,会自动的在 /usr/lib/systemd/system 目录添加一个配置文件。当我们使用 systemctl 控制该程序时,比如执行开启httpd服务:systemctl start httpd.service 。 那么我们的 systemctl 就会开启 httpd.service 配置里面指向的 /usr/sbin/httpd 可执行文件
如果我们想让该程序开机启动,我们可以执行命令 systemctl enable httpd,这个命令相当于在 /etc/systemd/system 目录添加一个软链接,指 向 /usr/lib/systemd/system 目录下的 httpd.service 文件。这是因为开机 时,Systemd只执行 /etc/systemd/system 目录里面的配置文件。
永久设置开机模式:
systemctl set-default multi-user.target/runlevel3 #开机默认为文本模式 systemctl set-default graphical.target/runlevel5 #开机默认为图形模式
二、Systemd服务管理
Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是 克服 sysvinit 固有的缺点,提高系统的启动速度。systemd和ubuntu的 upstart是竞争对手,从15.04版本开始,Ubuntu也已经采systemd作为其 标准的系统初始化系统.
系统初始化需要做的事情非常多。需要启动后台服务,比如启动 SSHD 服务; 需要做配置工作,比如挂载文件系统。这个过程中的每一步都被systemd 抽象 为一个配置单元,即 unit。可以认为一个服务是一个配置单元;一个挂载点 是一个配置单元;一个交换分区的配置是一个配置单元;
Service unit:系统服务,最常见的类型 Target unit:多个 Unit 构成的一个组,执行环境类型 Device Unit:硬件设备 Mount Unit:文件系统的挂载点 Automount Unit:自动挂载点 Path Unit:侦测特定文件或目录类型的 Scope Unit:不是由 Systemd 启动的外部进程 Slice Unit:进程组 Snapshot Unit:Systemd 快照,可以切回某个快照 Socket Unit:进程间通信的 socket服务 Swap Unit:swap 文件 Timer Unit:循环执行的服务
Rhel6 用 service 和 chkconfig 来管理服务,它是 SystemV 架构下的一个工具。
Rhel7 是用 systemctl 来管理服务,它融合了之前的 service 和 chkconfig 的功能于一体。 可以使用它永久性或只在当前会话中启用/禁用服务。systemctl 是 systemd 架构下的一个工具。
动作 Rhel6 旧指令 Rhel7新指令 启动某服务
#centos6 service network start #centos7 systemctl start network
停止某服务
#centos6 service netowrk stop #centos7 systemctl stop network
重启某服务
#centos6 service netowrk restart #centos7 systemctl restart network
检查服务状态
#centos6 service netowrk status #centos7 systemctl status network
删除某服务
chkconfig --del httpd
使服务开机自启动
#centos6 chkconfig --level 5 httpd on #centos7 systemctl enable httpd
使服务开机不自启动
#centos6 chkconfig --level 5 httpd off #centos7 systemctl disable httpd
显示所有已启动的服务
#centos6 chkconfig --list #centos7 systemctl list-unit-files | grep enabled
加入自定义服务
#centos6 chkconfig --add test #centos7 systemctl load test
查询服务是否开机自启
#centos6 chkconfig --list | grep httpd #centos7 systemctl is-enabled httpd
查看启动失败的服务
systemctl --failed
systemd的一些常用命令: 列出所有可用单元 :
systemctl list-unit-files
列出所有运行的单元:
systemctl list-unit-files | grep enabled
列出所有可用服务:
systemctl list-unit-files --type=service
列出所有运行的服务:
systemctl list-unit-files --type=service | grep enabled
屏蔽httpd服务:
systemctl mask httpd
取消屏蔽
httpd: systemctl unmask httpd
RHEL7的服务systemctl脚本存放在:/usr/lib/systemd/目录,有系统 (system)和用户(user)之分,像需要开机不登陆就能运行的程序,存 在系统服务里,即:/usr/lib/systemd/system目录下。每一个服务 以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],每个部 分内部是一些等号连接的键值对,注意,键值对的等号两侧不能有空格。
vim /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service [Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
[Unit] [Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及 配置与其他 Unit 的关系。它的主要字段如下。 Description:简短描述 Documentation:文档地址 Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败 Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败 BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行 Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后 启动 After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前 启动 Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行 Condition...:当前 Unit 运行必须满足的条件,否则不会运行 Assert...:当前 Unit 运行必须满足的条件,否则会报启动失败
[Service]
[Service]部分是服务的关键,是服务的一些具体运行参数的设置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下。 Type:定义启动时的进程行为。它有以下几种值。 Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程 会立即退出 Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继 续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下 执行 Type=idle:若有其他任务执行完毕,当前服务才会运行 ExecStart:启动当前服务的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当前服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务,可能的值包括 always(总是重启)、on-success、on-failure、on-abnormal、on abort、on-watchdog TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数 Environment:指定环境变量
[install] [Install]通常是配置文件的最后一个区块,用来定义如何启动,以及是否开 机启动。它的主要字段如下。 WantedBy:它的值是一个或多个 Target,当前 Unit 激活时 (enable)符号链接会放入/etc/systemd/system目录下面以 Target 名 + .wants后缀构成的子目录中 RequiredBy:它的值是一个或多个 Target,当前 Unit 激活时,符号 链接会放入/etc/systemd/system目录下面以 Target 名 + .required后 缀构成的子目录中 Alias:当前 Unit 可用于启动的别名 Also:当前 Unit 激活(enable)时,会被同时激活的其他 Unit 注意: 如果服务没有Install段落,一般意味着应该通过其它服务自动调用它们
Target 简单说,Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。从这个意义上说, Target 这个概念类似于"状态点",启动某个 Target 就好比启动到某种状 态。 传统的init启动模式里面,有 RunLevel 的概念,跟 Target 的作用很类似。 不同的是,RunLevel 是互斥的,不可能多个RunLevel同时启动,但是多个 Target可以同时启动。
//查看当前系统的所有 Target
systemctl list-unit-files --type=target
// 查看一个 Target 包含的所有 Unit
systemctl list-dependencies multi-user.target
//查看启动时的默认 Target
systemctl get-default
//设置启动时的默认 Target
systemctl set-default multi-user.target
//切换 Target 时,默认不关闭前一个 Target 启动的进程,
systemctl isolate
命令改变这种行为, //关闭前一个 Target 里面所有不属于后一个 Target 的进程
systemctl isolate multi-user.target
系统计划调度任务
1.一次性任务-at
yum -y install at systemctl start atd systemctl enable atd
at 23:30 #在23:30执行以下命令 tar zcf /backup/etc-boot_$(date +%F).tar.gz /etc /boot ctrl+d
atq #列出所有at任务
atrm #删除at任务
at -c 2 #显示第二条at任务内容
2.batch: batch直接调用at运行计划任务; batch不同于at的地方仅在于其所生成的任务计划是在系统空闲时执行的, 故batch命令后不能指定时间。
batch tar zcf /backup/etc-boot_$(date +%F).tar.gz /etc /boot ctrl+d
3.crond 周期性计划任务
yum -y install crontabs #crontans下载安装
crontab -e -u 用户名 0-59 0-23 1-31 1-12 0-7 命令 分 时 日 月 周
每分钟 2,5,7,9 3 * * * 每天的3点31分
//通常表示时间技巧: :表示任何时刻都接受的意思,所有时间段位上不能同时为 数字:表示具体某一小时某一分钟等,如 8 8 8 8 * 表示每年的8月 8日8时8分 ,:表示分隔时段,表示一段时间范围,如 8 9,13 * * * 表示每天 9:08和13:08 */: 在对应的时间位的有效取值上每#一次,如 */8 * * * * 表示每 8分钟一次 -:某个时间位上的连续区间,如 10-50/8 * * * * 表示第10分和 第50分之间每8分钟一次
案例: mysql数据库: 每周日晚上23:30做一次完整备份; 周一到周六晚上23:30做增量备份(扩展,自己查) 1.安装mysql5.7(参照笔记二进制安装) 2.改密码
mysql_secure_installation mysqladmin -u root -p password #更改root的密码,默认空密码第一个直接回车
3.复制world.sql到/root,登录数据库
mysql -uroot -p123.com #-p后跟的是我设置的密码 source /root/world.sql
授权 所有权限 库名.表名 用户 主机名 密码
grant all on test.* to lisi@'%' identified by '123456'; #数据库内,命令翻译为添加能够设置test中所有表的用户lisi,‘%’为可远端登录 #密码为‘123456’
%表示任何人都能访问
插入 删除 更新 查询 创建 删除
all = insert + delete + update + select create drop
4.查看库,切换库,查看表
show databases; #查看数据库名 create database world; #创建数据库 use world; #进入数据库 show tables; #查看表名称 desc #表名称 查看表结构 create table stu(id int,name varchar(20); #创建数据表 insert into stu values(1,'zhangsan'); #向表中插入数据 select * from stu; #查看表的内容 source #/备份文件路径/文件名
5.创建备份脚本
mkdir /sh vim /sh/backup.sh #!/bin/bash /usr/local/mysql/bin/mysqldump -uroot -p123.com --all-databases > /backup/mysql_$(date +%F).sql
6.创建计划任务
crontab -e 30 23 * * 0 /bin/bash /sh/backup.sh crontab -l #查看计划任务 crontab -r #删除计划任务