计划任务 计划任务分为一次性和循环性的计划任务
一次调度执行—–at 作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
1 2 3 4 语法格式 at <时间规格> now +5min teatime tomorrow (teatime is 16:00)
1 2 3 4 5 6 7 8 9 10 11 例1: [root@linux-server ~ ]# yum -y install at [root@linux-server ~]# systemctl status atd #查看启动状态 [root@linux-server ~ ]# systemctl start atd #首先要启动服务 [root@linux-server ~]# at now +1min #一分钟后开始执行 at> useradd uuuu at> <EOT> job 1 at Sat Mar 21 22:34:00 2015 [root@linux-server ~]# id uuuu #查看是否执行成功
1 2 3 4 5 6 7 例2: [root@linux-server ~]# vim at.jobs useradd u99 useradd u00 touch /a.txt [root@linux-server ~]# at 20:33 < at.jobs #执行该文件内的计划
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 例3: 1. 准备sudo用户 [root@linux-server ~]# id jack uid=1007(jack) gid=1012(jack) groups=1012(jack) [root@linux-server ~]# useradd jack #如果不存在创建 [root@linux-server ~]# visudo 91 ## Allow root to run any commands anywhere 92 root ALL=(ALL) ALL 93 jack ALL=(ALL) NOPASSWD: ALL #添加内容 [root@linux-server ~]# su - jack 2. 以sudo 用户jack创建at任务 [jack@linux-server ~]$ vim jack.at sudo useradd u200 sudo useradd u300 sudo touch /home/jack.txt [jack@linux-server ~]$ at 20:38 < jack.at
注:visudo文件中切记NOPASSWD必须要写,否则会报错。如下图。这是因为执行计划时是在后台的一个新建终端中执行的,且我们不能查看和切换到这个终端。因为其他用户在执行脚本时会需要输入密码,而我们又不能切换到该终端输入密码,所以计划最终将会无法执行。
查看一次性计划任务 1 2 # atq 2 Tue Aug 9 14:29:00 2022 a root
删除一次性计划任务
循环调度执行cron 用户级 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 安装软件 [root@qfedu.com ~]# yum -y install crontabs #如果软件不存在安装(默认已安装且启动) 服务相关操作 systemctl 相关指令 服务名(具体命令如下,下面以crond服务为例,后边的.service可省略) systemctl start crond.service #开启crond服务 systemctl restart crond.service #重启crond服务 systemctl status crond.service #查看crond服务的状态 systemctl enable crond.service #使crond服务开机自启 systemctl disable crond.service #关闭crond服务的开机自启 [root@linux-server ~]# systemctl status crond.service #查看服务状态,该服务默认是随系统启动的 [root@linux-server ~]# ps -ef(或aux) | grep crond root 755 1 0 20:18 ? 00:00:00 /usr/sbin/crond -n # crond进程每分钟会处理一次计划任务 各用户计划任务文件存储位置: [root@linux-server ~]# cd /var/spool/cron/ 管理方式: crontab -l //列出当前用户的所有计划任务 crontab -r //删除当前用户所有的计划任务 crontab -e //编辑当前用户的计划任务 crontab -u username //去管理其他用户的计划任务,只有root可以使用
1 2 3 4 5 6 7 8 9 10 语法格式 : Minutes Hours Day-of-Month Month Day-of-Week Command 分钟 小时 日 月 周 执行的命令,最好是命令的绝对路径 0-59 0-23 1-31 1-12 0-7 时间: *:每 */5 每隔分钟 #/会先执行一遍再算隔多久再执行,一般不用于周 ,:不同的时间段 #下方实例中有用到 - : 表示范围 #下方实例有用到
范例:
1 2 3 4 [root@c-6 ~]# vim /home/soso.sh # !/bin/bash touch /opt/a.txt [root@c-6 ~]# chmod a+x /home/soso.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@c-6 ~]# crontab -e #给用户设置多个计划任务 # 每天6:00执行 0 6 * * * /home/soso.sh # 每天8:40执行 40 8 * * * /home/soso.sh # 每周六凌晨4:00执行 0 4 * * 6 /home/soso.sh # 每周一到周五9:30 30 9 * * 1-5 /home/soso.sh # 每月1,5,8号的2:00整执行 00 02 1,5,8 * * /home/soso.sh
1 [root@c-6 ~]# crontab -l #列出当前用户所有计划任务
给其他用户设置计划任务(不指定-u则默认为当前用户)
1 2 3 4 [root@c-6 ~]# crontab -u jack -e #使用jack用户创建 [root@c-6 ~]# crontab -u jack -l #查看jack用户的计划任务 [root@c-6 ~]# crontab -r #删除当前用户的计划任务 [root@c-6 ~]# crontab -u jack -r #删除jack用户的计划任务
/etc/crontab中是系统的计划任务,由system用户执行的。同时有计划任务格式与解释可参考。如下:
日志轮转(切割) 日志有什么用? Linux系统日志对管理员来说,是了解系统运行的主要途径,因此需要对 Linux 日志系统有个详细的了解。Linux 系统内核和许多程序会产生各种错误信息、告警信息和其他的提示信息,这些各种信息都应该记录到日志文件中,完成这个过程的程序就是 rsyslog,rsyslog 可以根据日志的类别和优先级将日志保存到不同的文件中。
日志管理基础 rsyslog 负责日志数据分流管理 【服务】 logrotate 负责日志切割 【命令】
日志系统rsyslog 处理日志的进程 1 rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron... httpd/nginx/mysql: 可以自己的方式记录日志
1 2 3 4 5 [root@linux-server ~]# ps aux |grep rsyslogd root 752 0.0 0.2 216440 5548 ? Ssl 20:18 0:00 /usr/sbin/rsyslogd -n 日志配置主文件: /etc/rsyslog.conf
常见的日志文件(系统、进程、应用程序) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 tail -f /var/log/messages #动态查看日志文件的尾部,系统主日志文件 tail -f /var/log/secure #记录认证、安全的日志 tail /var/log/maillog #跟邮件postfix相关 tail /var/log/cron #crond、at进程产生的日志 tail /var/log/yum.log #yum的日志 /var/log/boot.log #系统启动过程日志记录存放 [root@c-6 ~]#w #当前登录的用户 /var/log/wtmp [root@c-6 ~]#last #最近登录的用户 /var/log/btmp 第一列,用户名; 第二列,终端位置,/pts/0 (伪终端)意味着从诸如ssh或者telnet的远程链接的用户,tty(teletypewriter)意味着直接连接到计算机或者本地链接的用户; 第三列,登录的ip或者内核。 第四列,开始时间; 第五列,结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机); [root@c-6 ~]#lastlog #所有用户的登录情况 /var/log/lastlog
日志优先级 1 2 3 4 5 6 7 8 9 10 11 日志级别分为以下几种: yum.log 0 debug #有调试信息的,日志信息最多 1 info #一般信息的日志,最常用 2 notice #最具有重要性的普通条件的信息 3 warning #警告级别 4 err #错误级别,阻止某个功能或者模块不能正常工作的信息 5 crit #严重级别,阻止整个系统或者整个软件不能工作的信息 6 alert #需要立刻修改的信息 7 emerg #内核崩溃等严重信息 none #什么都不记录
logrotate日志轮转 1 2 什么是日志轮转? 自动切日志 注:可以针对任何日志文件(rsyslog 日志、Nginx访问或错误日志...)
1 2 3 4 一、logrotate (轮转,日志切割) 1. 如果没有日志轮转,日志文件会越来越大 2. 将丢弃系统中最旧的日志文件,以节省空间 3. logrotate本身不是系统守护进程,它是通过计划任务crond每天执行
1 2 logrotate 配置文件: 主配置文件:/etc/logrotate.conf (决定每个日志文件如何轮转)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 配置日志轮转 [root@linux-server ~]# vim /etc/logrotate.conf weekly #轮转的周期,一周轮转,单位有年,月,日 rotate 4 #保留4份 create #轮转后创建新文件 dateext #使用日期作为后缀 # compress include /etc/logrotate.d #包含该目录下的配置文件,会引用该目录下面配置的文件 /var/log/wtmp { #对该日志文件设置轮转的方法 monthly #一月轮转一次 minsize 1M #最小达到1M才轮转,否则就算时间到了也不轮转 create 0664 root utmp #轮转后创建新文件,并设置权限 rotate 2 #保留2份 } /var/log/btmp { missingok #丢失不提示 monthly create 0600 root utmp rotate 1 }
属性说明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 配置 说明 daily 轮转周期,每天轮转 weekly 轮转周期,一周轮转 monthly 轮转周期,每月轮转 yearly 轮转周期,一年轮转 rotate 数字 保留的日志文件的个数,0 指没有备份 create 轮转后创建新文件,旧文件改名 dateext 以时间作为文件扩展名(date 时间、extend 扩展) compress 日志轮替时,压缩旧的日志 include /etc/logrotate.d 包含该目录下的子配置文件 maxsize 1M 达到1M才轮转(date跟max是或的关系) minsize 30k 最小达到30k轮转(date跟min同时满足才轮转) size 大小 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替 create 0600 root utmp create mode owner group 轮转后创建新日志,并设置权限。权限、属主、属组 missingok 丢失不提示 notifempty 空文件不轮转 missingok 如果日志不存在,则忽略该日志的警告信息 mail address 当日志轮替时,输出内容通过邮件发送到指定的邮件地址 sharedscripts 在此关键字之后的脚本只执行一次 prerotate/endscript 在日志轮替之前执行脚本命令,endscript 标识 prerotate 脚本结束 postrotate/endscript 在日志轮替之后执行脚本命令,endscrip i标识 postrotate 脚本结束
范例1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 轮转文件/var/log/yum.log [root@c-6 ~]# vi /etc/logrotate.d/yum /var/log/yum.log { dateext daily missingok notifempty maxsize 3k rotate 2 create 0600 root root } 测试: [root@c-6 ~]# /usr/sbin/logrotate -f /etc/logrotate.conf #手动轮转,-f为强制,无视轮转规则 [root@c-6 ~]# ls /var/log/yum* /var/log/yum.log /var/log/yum.log-20240627 [root@c-6 ~]# grep yum /var/lib/logrotate/logrotate.status #查看记录所有日志文件最近轮转的时间 "/var/log/yum.log" 2024-6-27-20:20:36 注:一天是可以进行多次切割的,带dateext属性第一次切割是可以成功的,但是第二次开始的切割就不能成功切割了,加上-f强制也不行的,这是因为有一个保护机制,他是不能覆盖的。要想继续切割就把dateext属性给去掉,这样就可以了,因为不再以今天的日期命名,所以也就不会存在覆盖了。
ssh远程管理服务 1 2 3 4 5 openssh-server 提供服务 openssh-clients 客户端 sshd服务的端口号----22 这里如何理解谁是服务端谁是客户端呢?可以这样想,A机器要远程连接B机器,A机器可以在B机器上看视频玩游戏,并且占用的是B机器的内存。相当于是B机器为A机器提供了看视频玩游戏的服务,A机器享受到了B机器的服务,所以B机器是服务端,A机器为客户端。
安装 1 2 3 4 [root@c-6 ~]# yum install -y openssh* #此处只装上述两个包即可,无需装这么多 1.服务器端启动服务: systemctl start sshd 2.关闭防火墙和selinux
登录方式 1 2 3 4 远程登录: [root@c-6 ~]# ssh root@192.168.100.70 参数解释: root 用户默认不写为root,也可以使用其他用户
1 2 3 4 5 6 7 8 9 10 11 12 13 无密码登陆(ssh密钥认证) 1.产生公钥和私钥: 生成一对密钥:公钥+私钥 [root@c-6 ~]# ssh-keygen #一直回车 2.查看钥匙的目录: [root@c-6 ~]# cd /root/.ssh/ id_rsa ---私钥---解密 id_rsa.pub ---公钥---加密 known_hosts ----确认过公钥指纹的可信服务器列表的文件 authorized_keys ---授权文件,是传输过公钥到对方服务后会自动重命名生成的 3.拷贝公钥给对方机器: [root@c-6 ~]# ssh-copy-id 对方机器ip地址 ip地址:指的是对方服务器 4.远程连接的时候就不用输入密码了
1 2 3 4 5 6 7 8 9 10 修改端口号: 修改配置文件: # vim /etc/ssh/sshd_config 17行 #Port 22 #将注释去掉,修改端口号可以修改为自定义的。 [root@c-6 ~]# systemctl restart sshd #修改配置文件后重启服务 远程登录 -p:port端口,指定端口,如果端口修改了需要指定 案例: [root@c-6 ~]# ssh root@192.168.100.70 -p 2222
远程拷贝 1 2 3 4 5 6 7 8 远程拷贝: # scp -P 端口号 /a.txt ip:/路径 源文件 目标地址 [root@c-6 ~]# scp -r -P 22 /root/ldq 192.168.100.70:/root/ 谁是远程加谁ip 远程拷贝目标机器改了端口加-(大)P 目录加 -r
常用命令