Linux知识心得21 定时任务+linux系统优化
笔记
1、查找etc下普通文件并打包
tar -cvf etc.tar `find /etc/ -type f `
2、查找etc下包含root的文件有那些
grep -Rl 'root' /etc/
3、搭建yum仓库的步骤
1、安装必要软件 createrepo vsftpd
2、上传被yum管理的软件
3、建立依赖关系(初始化仓库) #每次更新后需要再次重新建立依赖关系#
4、编写yum源配置文件
5、测试
6、实现远程连接 # 以下针对模板机上操作
4、获取当前系统的IP
[root@localhost ~]# ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
[root@ljl ~]# ip a | grep -oE '([0-9]+\.){3}[0-9]+'
crond计划任务
⼀ 定时任务介绍
1、什么是定时任务?
设定某个⽇期或时间周期性执⾏指令。⽐如设定⼀个闹铃,叫你每天早上7点钟起床等,这就是⼀个定时任务。
2、什么是Crond?
Crond是Linux系统中⽤来定期执⾏命令或脚本的⼀种服务软件,⼀般情况下,我们安装完CentOS操作系统之后,默认便会启动Crond任务调度服务。
Crond服务会定期(默认每分钟检查⼀次)检查系统中是否有要执⾏的任务⼯作,如果有,便会根据其预先设定的定时任务规则⾃动执⾏该定时任务⼯作,这个Crond定时任务服务就相当于我们平时早起使⽤的闹钟⼀样。
3、crond⽇志⽂件
/var/log/cron
4、为什么要使⽤定时任务?
定期备份数据,定期执⾏脚本程序
我们举个例⼦说明:例如,我们的数据库或者代码程序需要每天晚上0点做⼀次备份,这样每天夜⾥都需要执⾏的周期性⼯作,如果要让⼈操作的话,就得每天半夜爬起来,然后登录系统执⾏任务,执⾏完接着睡觉。另外,执⾏任务的过程也可能持续⼏个⼩时,这样⼀来,⼀个晚上我们就都不⽤睡觉了,这样显然是不⾏的。那么有什么办法来解决这个周期性的执⾏任务需求呢?
这就是Linux系统的定时任务Crond,这相当于我们平时⽣活中的闹钟功能,每天晚上提前设置定时,早晨按时叫醒你。
5、 定时任务主要分为以下两种使⽤情况。
(1)系统级别的定时任务: 临时⽂件清理例/tmp和/var/tmp等、系统信息采集、⽇志⽂件切割
(2)⽤户级别的定时任务: 定时向互联⽹同步时间、定时备份系统配置⽂件、定时备份数据库的数据
⼆ 定时任务管理
2.1 系统级计划任务
定义⽅式⼀:编辑⽂件/etc/crontab
1 SHELL=/bin/bash
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
3 MAILTO=root
4
5 # For details see man 4 crontabs
6
7 # Example of job definition:
8 # .---------------- minute (0 - 59)
9 # | .------------- hour (0 - 23)
10 # | | .---------- day of month (1 - 31)
11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
13 # | | | | |
14 # * * * * * user-name command to be executed
* * * * * root echo 'hello world'
# * 表示任意(分时日月周)都会执行
# 2-3 表示一个时间范围
# ,表示分隔 2,4,6
# /2 每隔多久
00 02 * * * ls #每天的凌晨2点整执行
00 02 1 * * ls #每月的1日的凌晨2点整执行
00 02 14 2 * ls #每年的2月14日凌晨2点执行
00 02 * * 7 ls #每周天的凌晨2点整执行
00 02 * 6 5 ls #每年的6月周五凌晨2点执行
00 02 14 * 7 ls #每月14日或每周日的凌晨2点都执行
00 02 14 2 7 ls #每年的2月14日或每年2月的周天的凌晨2点执行
*/10 02 * * * ls #每天凌晨2点,每隔10分钟执行一次
* * * * * ls #每分钟都执行
00 00 14 2 * ls #每年2月14日的凌晨执行命令
*/5 * * * * ls #每隔5分钟执行一次
00 02 * 1,5,8 * ls #每年的1月5月8月凌晨2点执行
00 02 1-8 * * ls #每月1号到8号凌晨2点执行
0 21 * * * ls #每天晚上21:00执行
45 4 1,10,22 * * ls #每月的1,10,22号的4:45执行
45 4 1-10 * * ls #每月的1到10号的4:45执行
3,15 8-11 */2 * * ls #每隔两天的上午8点到11点的第3和第15分钟执行
0 23-7/1 * * * ls #晚上11点到早上7点之间,每隔一个小时执行
15 21 * * 1-5 ls #周一到周五每天晚上21:15执行
定义⽅式⼆:把脚本放到该⽬录下
/etc/cron.hourly/ # 系统定时任务每个⼩时运⾏这个⽬录⾥的内容
/etc/cron.daily/ # 系统定时任务每天运⾏这个⽬录⾥的内容
/etc/cron.weekly/ # 系统定时任务每周运⾏这个⽬录⾥的内容
/etc/cron.monthly/ # 系统定时任务每⽉运⾏这个⽬录⾥的内容
2.2 ⽤户级计划任务
[root@localhost ~]# crontab -e # 创建计划任务
* * * * * /bin/ls
[root@localhost ~]# crontab -l # 查看计划任务
* * * * * /bin/ls
[root@localhost ~]# ls /var/spool/cron/
root
[root@localhost ~]# cat /var/spool/cron/root # 都是写在这⾥呢
* * * * * /bin/ls
[root@localhost ~]# tail /var/log/cron # 查看⽇志
[root@localhost ~]# crontab -u egon -e
# /etc/cron.deny 是定时任务的⿊名单,使⽤root将需要拒绝的⽤户加⼊/etc/cron.deny
[root@localhost ~]# echo "egon" >> /etc/cron.deny
[root@localhost ~]# su - egon # 登陆该普通⽤户,⽆法编写定时任务
上⼀次登录:四 8⽉ 13 19:44:10 CST 2020pts/1 上
[egon@localhost ~]$ crontab -e
You (egon) are not allowed to use this program (crontab)
See crontab(1) for more information
三 邮件
- Python
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import email.mime.multipart
import email.mime.text
msg = email.mime.multipart.MIMEMultipart()
msg['Subject'] = '你是风儿我是沙,缠缠绵绵回我家'
msg['From'] = '446010175@qq.com'
msg['To'] = '446010175@qq.com'
content = '''
来来来,一起摇摆
'''
txt = email.mime.text.MIMEText(content,_charset='utf-8')
msg.attach(txt)
smtp = smtplib.SMTP()
smtp.connect('smtp.qq.com', '25')
# qq邮箱 设置 账户 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务👇
smtp.login('446010175@qq.com', 'skcaeedrhnnrcaia')
smtp.sendmail('446010175@qq.com', '446010175@qq.com', msg.as_string())
smtp.quit()
print('邮件发送成功email has send out !')
- Linux
yum install mailx
vim /etc/mail.rc
set from=446010175@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=446010175@qq.com
set smtp-auth-password=skcaeedrhnnrcaia
set smtp-auth=login
echo "测试邮件" | mail -s "测试" 446010175@qq.com
from是发送的邮件地址
smtp是发生的外部smtp服务器的地址
smtp-auth-user是外部smtp服务器认证的用户名
smtp-auth-password是外部smtp服务器认证的用户密码
smtp-auth是邮件认证的方式
1、实时监控内存空闲率, 当空闲率小于50%, 发送报警邮件
FREE=`free | awk 'NR==2{print $4}'`
TOTAL=`free | awk 'NR==2{print $2}'`
NUM=`echo "$FREE * 100 / $TOTAL" | bc`
if [[ $NUM < 50 ]];then
echo "【内存报警】当前空闲率:${NUM}%,空闲率小于50%。" | mail -s '测试' chenyangqit@163.com
fi
cat >>/etc/security/limits.conf<<EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
EOF
四 linux系统优化
1. yum源处理与常用软件包安装 (记住******)
先在测试环境,配置好yum源
1.1 yum源备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
1.2 下载新的CentOS-Base.repo 到/etc/yum.repos.d/
curl -o /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-7.repo
1.3 添加epel源
curl -o /etc/yum.repos.d/epel.repo
http://mirrors.aliyun.com/repo/epel-7.repo
1.4 更新安装软件
yum update -y
1.5 安装常用软件
yum -y install tree nmap sysstat lrzsz telnet bash-completion bashcompletion-extras vim lsof net-tools rsync ntpdate nfs-utils
2. 规范系统主机名 (******)
hostnamectl set-hostname +主机名 :主机名能够反映出主机的作用即可
3. hosts 本地的域名解析 (******)
vim /etc/hosts # 编辑好之后,每台机器都发⼀份
编辑格式:
172.16.10.11 nc1 ceph-deploy
4. 关闭SELinux
临时关闭
setenforce 0
永久关闭,修改配置文件
/etc/selinux/config
5. 关闭防火墙
临时关闭
systemctl stop firewalld
设置开机不启动
systemctl disable firewalld
6. ntp同步系统时间 (也挺重要的)
通过定时任务同步系统时间
echo '0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null'
>>/var/spool/cron/root
7. 系统内核优化
设置⽤户级所能分配到的⽂件描述符数量:-n选项(系统默认的,也不用修改它)
ulimit -n 12
8. 文件句柄树 (一般用不到,不过挺重要)
文件句柄设置的太少了 ulimit -n 12
只设置了12个,说明只能打开12个文件,多了文件句柄就不够用了
ulimit -n unilmit:设置无限文件句柄树,无限打开文件,容易导致系统卡死
ulimit -n:打印出默认的文件句柄
9. 永久设置与优化 (企业默认的就够用了)
ulimit命令的设置都是临时⽣效的
若想永久设置,需要修改配置⽂件 为:/etc/security/limits.conf,把以下文件加入到此文件里
以下文件句柄配置的含义:
#加⼤⽂件描述符与最⼤打开的进程数
cat >>/etc/security/limits.conf<<EOF
* soft nofile 102400 ---》*代表所有用户,能够打开的文件句柄数是102400,soft代表软链接数
* hard nofile 102400 ---》hard代表硬连接数
* soft nproc 102400
* hard nproc 102400
EOF
10. 修改文件句柄数 (一般用不到,不过挺重要)
elesticsearch 简称 ELK,它对文件句柄数的要求是65536
但企业要求这个文件句柄数为 1024或65535 ,所以要进行设置。
这样设置:
cat >>/etc/security/limits.conf<<EOF
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
EOF
11. 调整Kernel pid max (了解为主)
在32位平台上,32768是pid最⼤值
在64位系统上,pid最⼤值可以设置为4194304
cat /proc/sys/kernel/pid_max :查看操作系统中的pid数,正常是1000个
临时调整:
echo 4194303 > /proc/sys/kernel/pid_max
永久生效:(编辑/etc/sysctl.conf-》最后一行加入kernel.pid_max= 4194303-》sysctl -p 即可)
echo "kernel.pid_max= 4194303" | tee -a /etc/sysctl.conf
sysctl -p
12. 其它内核优化 (尽量看看吧,挺重要的)
net.ipv4.ip_local_port_range = 4000 65000 ---》打开最大的本地端口号
net.ipv4.tcp_max_syn_backlog = 16384 ---》tcp最大的backlog
net.ipv4.route.gc_timeout = 100 ---》路由的超时时间
net.ipv4.ip_forward = 1 ---》系统内核是否开启网络转发功能(******)
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384