第三周.进程管理、内核管理和网络管理实践
任务一编写一个Bash脚本能够监控指定名称的进程例如 nginx 如果进程存在则输出其PID和状态信息如果进程不存在则自动尝试重启该进程可假设进程启动命令已知并记录日志包含时间戳。要求脚本中至少包含一个函数、一个条件判断以及一个循环如每5秒检查一次。以UBUNTU为例我们在root家目录下创建linshi.sh脚本文件具体代码如下图所示我们在linshi.sh脚本文件中创建了一个函数jiancesleep 5表示休眠5s“if /usr/bin/pidof nginx /dev/null”表示将结果丢入/dev/null即判断if条件的情况下不显示结果“/usr/bin/pidof”是命令pidof的绝对路径/usr/bin/pidof nginx表示判断nginx进程是否存在若存在则输出相应的PID”ps aux | grep nginx | awk NR2{print PID$2,状态$8}“表示在nginx进程存在的情况下输出其PID和状态信息其中”ps aux“表示输出所有的存在的进程信息之后通过管道符使用”grep nginx进行过滤“awk NR1{print PID$2,状态$8}”命令表示对过滤后的结果选择第2列和第8列分别作为PID和状态信息进行输出。当nginx进程存在时则输出其PID和状态信息并输出”进程存在“若nginx进程不存在则输出年月日时分秒(date %F %T)和”进程不存在“之后启动nginx服务之后nginx进程将存在注意”systemctl start nginx中的systemctl建议换成绝对路径“/usr/bin/systemctl代替具体的绝对路径查询可通过”which systemctl进行。当nginx服务已启动时结果如下图所示我们先使用“/bin/bash linshi.sh执行脚本文件linshi.sh。当nginx服务未启动时使用“/bin/bash linshi.sh执行脚本文件linshi.sh后的结果如下图所示。我们也可以通过cron实现定期执行通过使用vim /var/spool/cron/crontabs/root后添加”* * * * * /bin/bash /root/linshi.sh /var/log/linshi.log“后保存退出其中”* * * * *”表示每分钟执行一次并将结果传递到/var/log/linshi.log日志文件中可通过cat var/log/linshi.log查看结果具体的结果如下图所示。注意因为每分钟会执行一次“/bin/bash linshi.sh即会创建一个新的进程当我们想要关闭nginx进程时使用”kill -9 PID一次只能杀掉一个进程因此当创建的进程数量过多时可通过“pkill -f linshi.sh来杀死所有“/bin/bash linshi.sh生成的进程最后再杀死nginx进程如下图所示。任务二: 设计一个周期性任务每周日凌晨3点自动清理 /tmp 目录下超过7天的临时文件;每天中午12点记录当前系统进程数、内存使用量到 /var/log/system_health.log要求使用 crontab 配置上述任务并解释 cron 的时间语法、环境变量问题及日志查看方法。以UBUNTU为例我们在root家目录下创建linshi1.sh脚本文件具体代码如下图所示。其中“ps aux | tail -n 2 | wc -l表示统计当前系统进程数tail -n 2表示从ps aux输出的第二行开始wc -l表示统计行数最后将结果写入/var/log/system_health.log日志文件。”free -h | awk NR1 || NR2中free -h表示显示内存使用情况“awk NR1 || NR2”表示显示“free -h结果的第12行并将其写入 /var/log/system_health.log日志文件。我们先使用/tmp/data1.log来查看”/bin/bash linshi1.sh的执行效果如下图所示。为定时实现周期性任务可以使用crontab配置上述任务具体代码如下图所示。其中“* 12 * * * /bin/bash /root/linshi1.sh””表示在每天中午12点记录当前系统进程数、内存使用量到 /var/log/system_health.log“* 3 * * 0 /usr/bin/find /tmp -type f -delete”表示每周日凌晨3点自动清理 /tmp 目录下超过7天的临时文件,其中“* 3 * * * 0从左到右依次代表分钟、小时、天、月与星期如”3“则表示3点“0”表示周日由于cron的环境变量问题建议在crontab配置中用命令的绝对路径表示命令可用”which 命令“查看该命令的绝对路径。日志文件的查看使用”cat /var/log/system_health.log即可。任务三完成一个内核管理实践通过 sysctl 临时和永久修改一个内核参数例如 vm.swappiness10 或 net.ipv4.tcp_syncookies1 使用 cat /proc/sys/net/ipv4/ip_forward 等方式查看当前值并解释 /proc 文件系统的虚拟文件特性。以UBUNTU为例以root身份执行有关命令具体结果如下图所示。可以使用命令“sysctl net.ipv4.ip_forward查看ip转发的内核参数”net.ipv4.ip_forward0“表示不具有ip转发的功能此时我们可以使用命令”sysctl -w net.ipv4.ip_forward1来临时修改内核参数然而在重新启动后net.ipv4.ip_forward仍然会恢复0要永久修改内核参数net.ipv4.ip_forward的配置可使用命令“vim /etc/sysctl.conf修改内核参数net.ipv4.ip_forward去掉”net.ipv4.ip_forward1“前的“#”号即可然后使用“sysctl -p重载即可具体结果如下图所示。除了“sysctl net.ipv4.ip_forward外我们也可以使用”cat /proc/sys/net/ipv4/ip_forward来查看内核参数。/proc 提供了一个基于内存的文件系统接口用于访问系统的进程信息、内核参数、硬件信息等。它允许用户和程序通过读取和写入这些虚拟文件来获取系统状态和配置信息以及对某些系统行为进行控制。每个正在运行的进程在 /proc 下都有一个以其进程 IDPID命名的目录此外还有系统信息文件和内核参数文件系统管理员和程序员可以利用 /proc 文件系统来监控系统性能、调试程序、获取系统配置信息以及动态调整系统参数。任务四总结网络管理的相关内容可以使用“ip a命令来查看网卡和对应的ip地址使用命令”ifconfig也能实现相似的效果。也可以对网卡进行定制以UBUNTU为例网卡的配置文件在/etc/netplan旗下如下图所示。对网卡配置修改后需要使用命令“netplan apply进行应用。以ROCKY为例网卡的配置文件在/etc/netplan旗下如下图所示。、修改后需要使用命令“nmcli con down eth0;systemctl restart NetworkManager进行应用。如果想要查看路由表可使用命令“route -n具体结果如下图所示“0.0.0.0表示默认路由即当想要查找的路由在路由表不存在的时候使用默认路由。可以使用“route add -net 192.168.2.0/24 gw 10.0.0.12来添加网关为10.0.0.12的目的地192.168.2.0/24删除可以使用route del -net 192.168.2.0/24结果如下图所示。