软件包安装、定时任务、日志轮转)"/>
07Linux常用命令(软件包安装、定时任务、日志轮转)
Linux常用命令(软件包安装、定时任务、日志轮转)
安装软件
rpm【管理方式】
yum
rpm介绍:
rpm软件包名称:
软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律
#有依赖关系,不能自动解决依赖关系。
举例:openssh-6.6.1p1-31.el7.x86_64.rpm
数字前面的是名称
数字是版本号:第一位主版本号,第二位次版本号,带横杠的是修订号, el几---操作系统的版本。
noarch : 32位64位都支持
x86_64 : 64位
i4-686的包 :32位
devel:表示这个RPM包是软件的开发包;
======#用rpm安装需要考虑如下信息:
1.需要考虑系统的版本需要与rpm对应
2.系统的架构:如32位还是64位
3.需要考虑依赖关系
rpm安装
语法 # rpm -ivh 软件包名称
-i 表示安装,instll的意思
-v显示安装信息,还可以”-vv”、vvv”, v提供的越多显示信息越多
-h显示安装进度,以#显示安装的进度
-U 升级或升级包
-F 只升级己安装的包
-test 测试是否能够成功安装指定的rpm包
-force 强制动作
--replacepkgs 替换安装,即重新覆盖安装
查找rpm包的网站:/
1.通过rpm安装
可以先下载下来
[root@xiaoqiang ~]# wget .3.23-11.el7.x86_64.rpm
#wget下载命令
#wget -O 指定存放路径
[root@xiaoqiang ~]# rpm -ivh ntfs-3g-2017.3.23-11.el7.x86_64.rpm #本地安装rpm包2.直接通过连接安装rpm包
[root@xiaoqiang ~]# rpm -ivh .3.23-11.el7.x86_64.rpm3.升级与更新RPM软件包
升级:rpm -Uvh package_name,如果后面接的软件没有安装过,则系统直接安装;如果安装过,则系统自动更新至新版。
更新:rpm -Fvh package_name,如果后面接的软件没有安装过,则软件不会被安装;如果安装过,则系统自动更新至新版。
rpm查询
==查询
(从本地的rpm数据库)
-q[p] -q查询已安装的包,-qp查询未安装的包。它们都可接下面的参数-a 查询所有已安装的包,也可以指定通配符名称进行查询-i 查询指定包的信息(版本、开发商、安装时间等)。从这里面可以查看到软件包属于哪个包组。-l 查询包的文件列表和目录(包在生产的时候就指定了文件路径,因此可查未装包)-R 查询包的依赖性(Required)-c 查询安装后包生成的配置文件-d 查询安装后包生成的帮助文档
-f 查询系统文件属于哪个已安装的包(接的是文件而不是包)
--scripts 查询包相关的脚本文档。脚本文档分四类:安装前运行、安装后运行、卸载前运行、卸载后运行# rpm -qa | grep 软件名 # 查找软件是否安装
# rpm -ql httpd #查询http安装的文件与目录所在完整文件名(list
# rpm -qf /usr/share/httpd/noindex #查询该文件属于哪个包
# rpm -qf /etc/passwd #查询某一个文件是哪个软件产生的:只能查询已经安装好的软件# rpm -qRp zip-3.0-1.el6.x86_64.rpm 查询某个未安装包的依赖性如zip-3.0-1.el6.x86_64.rpm的依赖性
rpm卸载软件包
语法:# rpm -e 软件名称
-e erase
--nodeps 忽略依赖性强制安装或卸载(no dependencies)
rpm -e `rom -qa | grep nginx`
rpm工具管理软件包总结:
1. 很难解决包依赖关系
2. 如果某个文件没有,很难知道它由哪个rpm包提供如果该package被其他package依赖,会有报错.
如果RPM文件经常安装/删除/升级,某些操作可能会导致RPM数据库/var/lib/rpm/内的文件损坏,可以使用—rebuilddb这个参数来重建数据库:
rpm –rebuilddb
安装包后的文件分布
rpm包被安装后,会在/var/lib/rpm下会建立己装rpm数据库,以后有任何rpm的升级、查询、版本比较等包的操作都是从这个目录下获取信息并完成 相应操作的。
rpm安装完成后,相关的文件会复制到多个目录下(具体复制的路径是在制作rpm包时指定的)。一般来说,分布形式差不多如下表。
/etc 放置配置文件的目录
/bin> /sbin、/usr/bin 或/usr/sbin 一些可执行文件
/lib、 /lib64、 /usr/1ib(/usr/lib64) -些库文件
/usr/include -些头文件
/usr/share/doc 一些基本的软件使用手册与帮助文件
/usr/share/man 一些man page档案
yum方式管理
#可以自动解决rpm软件依赖关系,虽然是通过yum安装的但是最后执行的还是rpm,也就是说没有rpm命令yum也就不能用了。yum /et
分类:本地yum和远程yum
本地yum:
file://
远程yum:
http://
ftp://
yum操作
安装好环境之后我们有centos自带的官方yum源,我们也可以自行更换或者制作自己的yum源
格式:yum [options] COMMAND清理yum缓存:#yum clean all缓存软件包信息,提高搜索/安装软件的速度:# yum makecache fast查询yum源信息: # yum repolist all 列出所有仓库#yum repolist
列出包的依赖关系:# yum deplist查找软件:# yum search mysql
此命令会搜索到系统已经安装和yum源里没有安装的软件信息,可以用他简单测试yum是否好用查看命令属于哪个软件(包):# yum provides rz 查看系统已经安装好的软件和没有安装的软件(源里存在即可查到):# yum list all #一般会结合grep来搜索包,如yum list all | grep -i zabbix
安装软件:# yum install 软件名称# yum install mysql mysql-server -y
重装:# yum -y reinstall 软件名 卸载软件:# yum erase mysql-server # yum -y remove mysql-serveryum卸载rpm查找出来所有与httpd相关的软件包全部卸载掉:# yum -y remove `rpm -qa | grep httpd` 本地包安装:#yum localinstall -y *.rpm 查看装的包的命令,排错:#yum history #yum history undo 22更新包:#yum update 检车是否有可更新的rpm软件:#yum check-update 查看软件包信息:#yum info 软件包名称 安装yum-config-manager命令
系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令
yum -y install yum-utils --yum扩展
yum-config-manager --add-repo .repo
yum源配置
yum需要记住的目录或文件:
/etc/yum.repos.d/ #存放yum源目录,该目录里面的文件必须以.repo结尾
/etc/yum.conf #yum配置文件
/etc/cache/yum #yum的包缓存的目录
更换网络yum源–aliyun
=a2c6h.13651102.0.0.3e221b11WaK1yM --阿里yum源地址
[root@xiaoqiang ~]# cd /etc/yum.repo.d
[root@xiaoqiang yum.repos.d]# mkdir back
[root@xiaoqiang yum.repos.d]# mv *.repo back
[root@xiaoqiang yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo .repo #下载aliyun的yum源
参数解释
curl -o 指定存放路径
或者
wget -O /etc/yum.repos.d/CentOS-Base.repo .repo
安装扩展源--epel.repo
[root@xiaoqiang ~]# wget -O /etc/yum.repos.d/epel.repo .repo
[root@xiaoqiang ~]# cd /etc/yum.repos.d/
[root@xiaoqiang yum.repos.d]# ls
CentOS-Base.repo epel.repo
制作本地Yum源方式
yum仓库模板
#vim CentOS-Base.repo
[base] #仓库ID, ID必须保证唯一性
name #仓库名称,可随意命名
mirrorlist #该地址下包含了仓库地址列表,包含一个或多个镜像站点,和baseurl使用一个就可以了
baseurl #仓库地址。网络上的地址则写网络地址,本地地址则写本地地址,格式为"file://”后接路径,如file:///mnt/cdrom
gpgcheck=l #指定是否需要gpg签名,1表不需要,0表示不需要
gpgkey = #签名文件的路径
enable #该仓库是否生效,enable=l表示生效,enable=O表示不生效
cost= #开销越高,优先级越低repo配置文件中可用的宏:
$releasever :程序的版本(release version),对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6. 5则替换为6
$arch:系统架构
$basharch: 系统基本架构,如i686, i586等的基本架构为i386
$YUM0-9:在系统定义的环境变量,可以在yum中使用
通过镜像制作本地yum源:
mkdir /opt/xiexie #创建挂载目录
mount /dev/cdrom /opt/xiexie #将镜像挂载到创建的目录
或者:将镜像上传到/opt/ 并mount CentOS-7-x86_64-DVD-1708.iso /opt/xiexie/
#rm -rf /etc/yum.repos.d/*#手动编写文件
[root@xiaoqiang ~]# cd /etc/yum.repos.d/ #yum源配置文件存放目录
[root@xiaoqiang yum.repos.d]# vim CentOS.Base.repo #在编写yum配置文件是必须是.repo
[centos7u4] #yum源区别名称,用来区分其他的yum源,
name=centos7u4 #yum源描述 yum源名字
baseurl=file:///opt/xiexie #指定本地yum源的路径,镜像挂载目录
enabled=1 #是否使用此yum源(1为打开,0为关闭)
gpgcheck=0 #检查软件#自动生成yum源
#yum-congif-manager
##yum install -y yum-utils
#yum-congif-manager --add-repo 'file:///mnt'
yum排错:
1.yum配置文件必须以.repo结尾
2.yum.conf里面8,9行的值设置成0
3.配置文件关键字错误
4.检查yum源是否存在
5.baseurl路径是否正确
6.镜像大小是否正确
7.当有Yum进程存在的时,无法同时再打开一个Yum进程
配置****epel****仓库
系统发行商在系统中放置的rpm包一般版本都较老,可能有些包有较大的延后性。而epel是由fedora社区维护的高质量高可靠性的安装源,有很多包 是比系统包更新的,且多出很多系统没有的包。总之,用到epel的机会很多很多,所以就拿来当配置示例了。
#注意:安装yum install yum-priorities
Yum Priorities 插件可以用来强制保护源。它通过给各个源设定不同的优先级,使得系统管理员可以将某些源(比如 Linux 发行版的官方源)设定为最高优先级,从而保证系统的稳定性(同时也可能无法更新到其它源上提供的软件最新版本)。有两种方式可以使用epel源。
查询版本安装:yum provides epel-release
方法一: 安装 epel-release-7-11.noarch 或者 epel-release
repo文件的配置格式如下:
shell> rpm -ivh epel-release-latest-6.noarch.rpm
安装后会在/etc/yum. repo, d/目录下生成两个epel相关的repo文件,其中一个是epel. repo«此文件中epel的源设置在了 fedora的镜像站点上,这 对国内网来说可能会较慢,可以修改它为下面的内容。
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirrors, sohu. com/fedora-epel/6Server/$basearch/
#mirrorlist=https://mirrors, fedoraproject, org/metalink?repo=epel-6&arch=$basearch
failovermethod=priori ty
enabled=l
gpgcheck=l
gpgkey=file:///etc/pk i/rpm-gpg/RPM-GPG-KEY-EPEL-6方法二:直接增加epel仓库
在/etc/yum. repos, d/下任意一个repo文件中添加上epel的仓库即可。
[epel]
name=epel
baseurl=http://mirrors, sohu. com/fedora-epel/6Server/$basearch/
enabled=l
gpgcheck=O
然后清除缓存再建立缓存即可。
yum clean all ; yum makecache
源码包管理:
而一个软件要在Linux上执行,必须是二进制文件,因此当我们拿到软件源码后,需要将它编译成二进制文件才能在Linux上运行。
源码包的编译用到了linux系统里的编译器,通常源码包都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。
源码安装的优点,编译安装过程,可以设定参数按照需求增加功能,进行安装,并且可以指定安装的版本,可以指定安装路径,灵活性比较大。
获得源码包途径 官方网站,可以获得最新的软件包
mysql: /
wget .7/mysql-boost-5.7.27.tar.gz
Nginx: www.nginx /mariadb
安装源码包
准备工作(去Nginx官网下载Nginx软件的源码包)
1.编译环境如编译器gcc、make
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel #编译环境的准备gcc是编译工具,编译单个文件
make工具可以看成是一个智能的批处理工具,通过调用makefile文件中用户指定的命令来进行编译和链接的。(将这种高级语言写的代码编译成二进制语言)
pcre支持正则表达式
zlib-devel,有些应用依赖于这个库才能正常运行,因此需要安装zlib-devel
openssl-devel 某些库文件等跟开发相关的东西。2. 准备软件 nginx-1.16.0.tar.gz
3. 部署安装Nginx软件服务
实战:
[root@xiaoqiang ~]# wget .16.1.tar.gz
[root@xiaoqiang ~]# tar xzf nginx-1.16.1.tar.gz
[root@xiaoqiang nginx-1.16.1]# ./configure --user=www --group=www --prefix=/usr/local/nginx
[root@xiaoqiangr nginx-1.16.1]# make #编译文件
[root@xiaoqiang nginx-1.16.1]# make install #安装文件
[root@xiaoqiang ~]# useradd www #创建nginx用户
[root@xiaoqiang ~]# /usr/local/nginx/sbin/nginx #启动nginx
[root@xiaoqiang ~]# systemctl stop firewalld #关闭防火墙停止nginx
[root@xiaoqiang nginx-1.16.1]# /usr/local/nginx/sbin/nginx -s stop
不同的程序,其conf igure选项不尽相同,应使用/configure—heIp”获取具体的信息。
详解源码安装三步曲
# ./configure #相对路径执行安装a. 指定安装路径,例如 --prefix=/usr/local/nginx b. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求 最终生成:Makefilec. 软件模块或者功能的启用禁用#make //按Makefile文件编译,产生可执行的文件。但是这个文件在当前目录中#make install //按Makefile定义的文件路径安装,将产生的可执行文件,安装到合适的位置,相当于拷贝#将安装路径做环境变量
时间自动同步阿里云
yum install -y ntpdate
ntpdate ntp6.aliyun
局域网远程yum源制作(企业案例)
操作系统:centos7.4资源: CentOS-7-x86_64-DVD-1708.iso镜像
实验服务器两台:192.168.246.170 (作为vsftpd服务端)192.168.246.169 (客户端)首先测试两台主机可否ping通在192.168.246.170上操作
[root@192 ~]# ping 192.168.246.169
PING 192.168.246.169 (192.168.246.169) 56(84) bytes of data.
64 bytes from 192.168.246.169: icmp_seq=1 ttl=64 time=0.644 ms
[root@192 ~]# systemctl stop firewalld
[root@192 ~]# setenforce 0 #关闭selinux在192.168.246.169上操作:
[root@xiaoqiang ~]# ping 192.168.246.170
PING 192.168.246.170 (192.168.246.170) 56(84) bytes of data.
64 bytes from 192.168.246.170: icmp_seq=1 ttl=64 time=0.374 ms
[root@xiaoqiang ~]# systemctl stop firewalld
[root@xiaoqiang ~]# setenforce 0==========================================================
在192.168.246.170上操作---制作本地yum源,作为yum服务端将CentOS-7-x86_64-DVD-1708.iso 上传到/opt目录下[root@192 ~]# mkdir /opt/yum-iso #创建挂载点[root@192 ~]# mount /opt/CentOS-7-x86_64-DVD-1708.iso /opt/yum-iso/[root@192 ~]# yum install -y vsftpd[root@192 ~]# systemctl start vsftpd[root@192 ~]# cp -r /opt/yum-iso/* /var/ftp/pub/[root@192 ~]# cd /var/ftp/[root@192 ftp]# yum install -y createrepo[root@192 ftp]# createrepo pub/[root@192 ftp]# cd /etc/yum.repos.d/
[root@192 yum.repos.d]# vim myyum.repo
[ftpYum]
name=ftpYum
baseurl=file:///opt/yum-iso
enabled=1
gpgcheck=0
[root@192 yum.repos.d]# yum clean all
[root@192 yum.repos.d]# yum makecache
[root@192 yum.repos.d]# yum repolist
===================================================================
yum客户端
在192.168.246.169上操作:
[root@xiaoqiang ~]# cd /etc/yum.repos.d/
[root@xiaoqiang yum.repos.d]# vim my.repo
[ftpYum]
name=centos
baseurl=ftp://192.168.246.170/pub
enabled=1
gpgcheck=0
[root@xiaoqiang yum.repos.d]# yum clean all
[root@xiaoqiang yum.repos.d]# yum makecache
[root@xiaoqiang yum.repos.d]# yum repolist
计划任务
计划任务概念解析
在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、crontab软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。
计划任务分为一次性和循环性的计划任务
一、一次调度执行-----at
yum install -y at
作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
一次性调度执行 at—实战
时间定义:
at允许使用一套相当复杂的指定时间的方法。
● 能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。 例如:04:00
● 能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
● 能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。 例如:12pm
● 能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。 例如:04:00 2009-03-1
● 能够使用相对计时法。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。 例如:now + 5 minutes 04pm + 3 days
● 能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。
语法格式
at <时间规格>now +5minteatime tomorrow (teatime is 16:00) noon5pm august 3 2019 #● atq:列出用户的计划任务,如果是超级用户将列出所有用户的任务,结果的输出格式为:作业号、日期、小时、队列和用户名
#● atrm:根据Job number删除at任务
#● batch:在系统负荷允许的情况下执行at任务,换言之,就是在系统空闲的情况下才执行at任务
# at 5pm+3 days #三天后的下午5点,执行 /bin/ls
at> /bin/ls
at>
job 7 at 2016-01-08 17:00# at 17:20 tomorrow #明天17点钟,输出时间到指定文件内
at> date >/root/date.log
at>
job 8 at 2016-01-06 17:20# atq #查看任务
8 2016-01-06 17:20 a root
7 2016-01-08 17:00 a root# atrm 7 #删除任务# atq
8 2016-01-06 17:20 a root# 指定在今天下午5:30执行某命令。以下命令格式,结果都一样:# at 5:30pm # at 17:30 # at 17:30 today # at now + 5 hours # at now + 300 minutes # at 17:30 24.2.99 # at 17:30 2/24/99 # at 17:30 Feb 24 # at -f /home/test/work 4pm + 3 days #在三天后下午4点执行文档work中的作业
#at sunday +10 minutes 将工作安排在比当前时间晚十分钟的下一个星期日进行:
# at 12:30 102120 安排作业在2020年10月21日12:30运行:
#at now +1 hours安排一个作业从现在开始运行一小时:您也可以在中[[CC]YY]MMDDhhmm[.ss]使用-t选项指定时间和日期。这是一个例子:at -t 202005111321.32#查看计划任务 at -l
例1:
[root@xiaoqiang ~ ]# yum -y install at
[root@xiaoqiang ~]# systemctl status atd #查看启动状态
[root@xiaoqiang ~ ]# systemctl start atd #首先要启动服务[root@xiaoqiang ~]# at now +1min #一分钟后开始执行
at> useradd uuuu
at> <EOT> #Ctrl+D
job 1 at Sat Mar 21 22:34:00 2015[root@xiaoqiang ~]# id uuuu
从命令行输入at
例2:
[root@xiaoqiang ~]# vim at.jobs
useradd u99
useradd u00
touch /a.txt[root@xiaoqiang ~]# at 20:33 < at.jobs
从文件输入at
例3:
1. 准备sudo用户
[root@xiaoqiang ~]# id xiexie
uid=1007(xie) gid=1012(xie) groups=1012(xie)
[root@xiaoqiang ~]# useradd xiexie #如果不存在创建
#usermod -aG wheel xiexie
[root@xiaoqiang ~]# visudo91 ## Allow root to run any commands anywhere92 root ALL=(ALL) ALL93 xie ALL=(ALL) NOPASSWD: ALL #添加内容[root@xiaoqiang ~]# su - xiexie
2. 以sudo 用户jack创建at任务[jack@xiaoqiang ~]$ vim xiexie.atsudo useradd u200sudo useradd u300sudo touch /home/xiexie.txt[jack@xiaoqiang ~]$ at 20:38 < xiexie.at
循环调度执行cron 用户级
linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
###管理方式:
crontab -l List the jobs for the current user. //列出当前用户的计划任务
crontab -r Remove all jobs for the current users. //删除当前用户所有的计划任务
crontab -e Edit jobs for the current user. //编辑当前用户的计划任务
crontab -i:删除条目时提示是否真的要删除
管理员可以使用 -u username, 去管理其他用户的计划任务
丢了就在这里找看看:/var/log/cron命令:
crond是允许接受选项的。
crond [-n][-円[-x flags]
-n:让crond以前端方式运行,即不依赖于终端。
-P:不重设环境变量PATH,而是从父进程中继承。
-X:设置调试项,flags是调试方式,比较有用的方式是test和sch,即"-x test"和"-x sch”。
:其中test调试将不会真正的执行,sch调试将可以看到等待时间。具体的见下面的示例。
先看看启动脚本启动crond的方式。例如:
crontab -u root -l # root 查看自己的 cron 计划任务
crontab -u san -r # root 想删除 san 的 cron 计划任务
安装软件# yum -y install crontabs #如果软件不存在安装
启动服务rhel5/6:
# /etc/init.d/crond status
# /etc/init.d/crond startrhel7:
# systemctl start crond.service
# systemctl status crond.service
# systemctl enable crond.service开机启动(rhel5/6)
# chkconfig crond on# systemctl status crond.service #查看服务状态# ps -ef | grep crond
root 755 1 0 20:18 ? 00:00:00 /usr/sbin/crond -n#crond进程每分钟会处理一次计划任务存储位置:
# cd /var/spool/cron/
语法格式 : (一个月中的某天) 星期几
Minutes Hours Day-of-Month Month Day-of-Week Command 分钟 小时 日(天) 月 周(星期) 执行的命令,最好是命令的绝对路径0-59 0-23 1-31 1-12 0-7
* * * * * /usr/bin/mkdir /opt/`date +%F-%X`代表每分钟都执行
*/5 * * * * 每五分钟执行时间:
*:使用”*”表示每单位,即每分钟,每小时,每天,每月,每周几(仍然是每天)。*/5 每隔分钟
在以上各个字段中,还可以使用以下特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”[表示,:不同的时间段]中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”[表示范围]正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
实战
[root@xiaoqiang ~]# vim /home/soso.sh
#!/bin/bash
touch /opt/a.txt
[root@xiaoqiang ~]# chmod +x /home/soso.sh
创建计划任务
[root@xiaoqiang ~]# crontab -e //当前用户编写计划任务
每天6:00执行
0 6 * * * /home/soso.sh每周六凌晨4:00执行
0 4 * * 6 /home/soso.sh每天0:30
30 0 * * * /home/soso.sh
每周一到周五8:00,每周一到周五9:00
0 8,9 * * 1-5 /home/soso.sh每周六23:59
59 23 * * 6 /home/soso.sh
[root@xiaoqiang ~]# crontab -l #列出计划任务
实例
00 00 * * * /home/soso.sh #每天凌晨00 02 * * * ls #每天2:00整 00 02 1 * * ls #每月1号2:00整 00 02 14 2 * ls #每年2月14号2:00整00 02 * * 7 ls #每周日2:00整 00 02 * 6 5 ls #每年6月的周五2:00整00 02 * * * ls #每天2:00整 */5 * * * * ls #每隔5分钟 00 02 1,5,8 * * ls #每月1,5,8号的2:00整 00 02 1-8 * * ls #每月1到8号的2:00整
实例1:每1分钟执行一次myCommand
* * * * * myCommand
实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2 * * myCommand
实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
* 23-7/1 * * * /etc/init.d/smb restart
使用其他用户创建
[root@xiaoqiang ~]# crontab -u jack -e #使用jack用户创建
[root@xiaoqiang ~]# crontab -u jack -l #查看jack用户的计划任务
[root@xiaoqiang ~]# crontab -r #删除当前用户的计划任务
[root@xiaoqiang ~]# crontab -u jack -r #删除jack用户的计划任务
使用者权限文件:
文件:
/etc/cron.deny
说明:
该文件中所列用户不允许使用crontab命令文件:
/etc/cron.allow(优先级比cron.deny高)
说明:
该文件中所列用户允许使用crontab命令系统本身的计划任务/etc/crontab
日志轮转
审计日志(赚钱)。诊断日志(排错)
日志重要性
Linux系统日志对管理员来说,是了解系统运行的主要途径,因此需要对 Linux 日志系统有个详细的了解。
Linux 系统内核和许多程序会产生各种错误信息、告警信息和其他的提示信息,这些各种信息都应该记录到日志文件中,完成这个过程的程序就是 rsyslog,rsyslog 可以根据日志的类别和优先级将日志保存到不同的文件中。
二、日志系统rsyslog
日志管理基础
rsyslog 日志管理 systemctl status rsyslog #vi /etc/rsyslog.conf
logrotate日志轮转 #1:不希望日志变得太大 2:安全 vim /etc/logrotate.d
**一、处理日志的进程 **
rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron... httpd/nginx/mysql: 可以自己的方式记录日志
[root@xiaoqiang ~]# ps aux |grep rsyslogd
root 752 0.0 0.2 216440 5548 ? Ssl 20:18 0:00 /usr/sbin/rsyslogd -n日志配置主文件:
/etc/rsyslog.conf
二、常见的日志文件(系统、进程、应用程序)
#tail -f /var/log/messages #动态查看日志文件的尾部,系统主日志文件#tail -f /var/log/secure #记录认证、安全的日志tail /var/log/maillog #跟邮件postfix相关tail /var/log/cron #crond、at进程产生的日志tail /var/log/dmesg #和系统启动相关tail /var/log/yum.log #yum的日志tail -f /var/log/mysqld.log #MySQL日志tail /var/log/xferlog #和访问FTP服务器相关/var/log/boot.log #系统启动过程日志记录存放[root@xiaoqiang ~]#w #当前登录的用户 /var/log/wtmp[root@xiaoqiang ~]#last #最近登录的用户 /var/log/btmp
第一列,用户名;
第二列,终端位置,/pts/0 (伪终端)意味着从诸如ssh或者telnet的远程链接的用户,tty(teletypewriter)意味着直接连接到计算机或者本地链接的用户;
第三列,登录的ip或者内核。
第四列,开始时间;
第五列,结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机);[root@xiaoqiang ~]#lastlog #所有用户的登录情况 /var/log/lastlog
日志优先级
日志级别分为:7种日志级别代号0-70 debug #有调试信息的,日志信息最多1 info #一般信息的日志,最常用2 notice #最具有重要性的普通条件的信息3 warning #警告级别4 err #错误级别,阻止某个功能或者模块不能正常工作的信息5 crit #严重级别,阻止整个系统或者整个软件不能工作的信息6 alert #需要立刻修改的信息7 emerg #内核崩溃等严重信息none #什么都不记录
三、logrotate日志轮转
什么是日志轮转? 自动切日志
注:可以针对任何日志文件(rsyslog 日志、Nginx访问或错误日志...)
一、logrotate (轮转,日志切割)
1. 如果没有日志轮转,日志文件会越来越大
2. 将丢弃系统中最旧的日志文件,以节省空间
3. logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
logrotate 配置文件:
主配置文件:/etc/logrotate.conf (决定每个日志文件如何轮转)
配置日志轮转# vim /etc/logrotate.d 子配置文件[root@xiaoqiang ~]# vim /etc/logrotate.conf 主配置文件
weekly #轮转的周期,一周轮转,单位有年,月,日
rotate 4 #保留4份
create #轮转后创建新文件
dateext #使用日期作为后缀
#compress #日志轮替时,旧的日志进行压缩
include /etc/logrotate.d #包含该目录下的配置文件,会引用该目录下面配置的文件/var/log/wtmp { #对该日志文件设置轮转的方法 monthly #一月轮转一次 minsize 1M #maxsize size #最小达到1M才轮转,否则就算时间到了也不轮转create 0664 root utmp #轮转后创建新文件,并设置权限 rotate 2 #保留2份
}/var/log/btmp { missingok #丢失不提示 monthly create 0600 root utmp rotate 1
}
实战案例
例1:轮转文件/var/log/yum.log[root@xiaoqiang ~]# vim /etc/logrotate.d/yum
/var/log/yum.log {missingok #丢失不提醒#notifempty #空文件不轮转 #size 30k #只要到了30k就轮转#yearlydaily y #每天轮转一次 rotate 3 create 0644 root root
}
/logrotate /etc/logrotate.conf #手动轮转
测试:logrotate
[root@xiaoqiang ~]# /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
[root@xiaoqiang ~]# ls /var/log/yum*
/var/log/yum.log /var/log/yum.log-20191110[root@xiaoqiang ~]# grep yum /var/lib/logrotate/logrotate.status #查看记录所有日志文件最近轮转的时间
"/var/log/yum.log" 2019-11-10-21:26:142:日志安全,操作日志的隐藏权限
[root@xiaoqiang log]# cd /etc/logrotate.d/
[root@xiaoqiang logrotate.d]# vim syslog
建议测试时先把/etc/logrotate.d/syslog中messages删除,然后在下面添加如下:
/var/log/messages{prerotatechattr -a /var/log/messagesendscript#notifemptydailycreate 0600 root rootmissingokrotate 3postrotatechattr +a /var/log/messagesendscript
}
[root@xiaoqiang logrotate.d]# /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
[root@xiaoqiang logrotate.d]# cd /var/log/
[root@xiaoqiang log]# ls mess*
messages messages-20200805 messages-20200806参数解释:
prerotate/endscript - 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript - 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
作业
1.测试当日期和星期发生冲突的时候以哪个为准,还是取或的关系,全部都执行?
取或。只先执行其中一个
2.计划每星期天早8点服务器定时重启,如何实现?
crontab -e
0 8 * * 0 /usr/bin/reboot
3.某系统管理员需要每天做一定的重复工作,编制一个解决方案:
(1).从下午 4:50 删除/abc 目录下的全部子目录和全部文件;
crontab -e
50 16 * * */usr/bin/rm -rf /abc/*
(2).每逢周一下午 5:50 将/data目录下的所有目录和文件归档并压缩为文件backup.tar.gz;
crontab -e
50 17 * * 1/usr/bin/tar cvzf backup.tar.gz /data
(3).在早上 8:00 开机后启动crontab。
crontab -e
0 8 0 0 0/usr/bin/systemctl start crond.service
/var/log/messages
endscript
#notifempty
daily
create 0600 root root
missingok
rotate 3
postrotatechattr +a /var/log/messages
endscript
}
[root@xiaoqiang logrotate.d]# /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
[root@xiaoqiang logrotate.d]# cd /var/log/
[root@xiaoqiang log]# ls mess*
messages messages-20200805 messages-20200806
参数解释:
prerotate/endscript - 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript - 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
**作业**```shell
1.测试当日期和星期发生冲突的时候以哪个为准,还是取或的关系,全部都执行?
取或。只先执行其中一个
2.计划每星期天早8点服务器定时重启,如何实现?
crontab -e
0 8 * * 0 /usr/bin/reboot
3.某系统管理员需要每天做一定的重复工作,编制一个解决方案:
(1).从下午 4:50 删除/abc 目录下的全部子目录和全部文件;
crontab -e
50 16 * * */usr/bin/rm -rf /abc/*
(2).每逢周一下午 5:50 将/data目录下的所有目录和文件归档并压缩为文件backup.tar.gz;
crontab -e
50 17 * * 1/usr/bin/tar cvzf backup.tar.gz /data
(3).在早上 8:00 开机后启动crontab。
crontab -e
0 8 0 0 0/usr/bin/systemctl start crond.service
更多推荐
07Linux常用命令(软件包安装、定时任务、日志轮转)
发布评论