实验7 - 进程管理 服务管理

学习目标

  • 进程管理
  • 进程查看、显示命令的执行时间
  • 杀死、调整运行优先级
  • 在后台执行进程,注销后保证进程继续执行
  • 实施作业控制
  • 服务管理

  • 使用 systemctl 显示、启动和停止服务

  • 使用 systemctl 实现服务的持久化管理
  • 使用 servicechkconfig/update-rc.d 管理服务

  • cron 服务

  • 修改配置文件安排 cron 任务

  • 使用 crontab 命令安排 cron 任务
  • 控制使用 cron 的人员

*提交时间

  • 网络工程221-4班,2024年5月25日(第12周 周六)23:00 与下次实验报告合并提交

*补交时间(补交满分80计算)

  • 2024年5月26日(第12周 周日)23:00 与下次实验报告合并提交

*提交方法

  • 电子版:在CG平台上提交
  • 打印版:2024年5月27-28日(第13周 周一、周二)(网络221-224)

    任务1:显示进程

  • 显示出当前用户在shell下所运行的进程的信息

    ps
    

    常见的选项:

    a:显示当前终端下的所有进程信息,包括其他用户的进程。

    u:使用以用户为主的格式输出进程信息。

    x:显示当前用户在所有终端下的进程。

    -e:显示系统内的所有进程信息。

    -l:使用长(long)格式显示进程信息。

    -f:使用完整的(full)格式显示进程信息。

  • 只查看用户 学生姓名 (如没有自行创建)的进程的信息(pgrep) ( 结果截图

  • 列出系统中正在运行的所有进程的详细信息

  • 列出系统中正在运行的所有进程的详细信息,并想看清所运行的进程的完整命令行 结果截图

ps aux
  • 列出系统中正在运行的所有进程的详细信息,对 -pcpu 输出列进行排序
ps aux --sort=-pcpu
  • 显示系统进程树 ( 结果截图

  • 列出 系统中任意 组运行的所有进程的PID (ps -G)( 结果截图

  • 列出 root 用户或 daemon 用户运行的所有进程的PID ( 结果截图

任务2:进程管理

  • 在前台运行第1个 sleep 进程(1小时),然后以交互方式挂起之
sleep 3600
<ctrl-z>
jobs #查看
  • 在后台运行第2个 sleep 进程(2小时)

  • 列出所有正在运行的作业状态 (jobs -r)

  • 列出所有正在运行的作业状态,同时列出进程PID (jobs -rp)( 结果截图

  • 将第1个 sleep 进程调度到后台继续执行 (jobs 查看)

bg %sleep\ 3600
  • 列出所有正在运行的作业状态,同时列出进程PID ( 结果截图
jobs -rp
  • 显示所有名为 sleep 进程的 pid 和 nice 值 ( 结果截图
ps -o pid,ni,command | grep "sleep"
581   0 sleep 3600
611   5 sleep 7200
1185  0 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn sleep

ps -o pid,ni,command | egrep "sleep|PID"
PID  NI COMMAND
581   0 sleep 3600
611   5 sleep 7200
1247  0 grep -E sleep|PID
  • 尝试调高第1个 sleep 进程的优先级(renice)

  • 尝试调低第1个 sleep 进程的优先级(#注意!调低nice值需要root权限)( sleep进程 nice值 结果截图

  • 尝试再次调高第1个 sleep 进程的优先级 ( sleep进程 nice值 结果截图

  • 将第1个 sleep 进程调度到前台

fg %sleep\ 3600
  • 终止第1个 sleep 进程的执行
<ctrl-c> #交互的方式
  • 杀死第2个 sleep 进程
kill 611
  • 强行杀死名为 bash 的进程,发生了什么?为什么?
kill -s 9 6837

终端关闭,因为终端正在使用bash

提示 请使用 学生姓名 和 root 身份分别执行上面的作业控制,找出不同之处

任务3:守护进程(服务)管理

  • 显示当前已运行的所有服务(systemctl--type service)( 结果截图

  • 查看所有服务是否在启动系统时启用(-t)( 结果截图

  • 显示 cron 服务是否正在运行 ( 结果截图

  • 显示 cron 服务是否在启动时运行

  • 显示 cron 服务的运行状态( 结果截图

  • 关闭正在运行的 cron 服务

  • 显示 cron 服务的运行状态 ( 结果截图

  • 启动 cron 服务

  • 禁止 cron 服务在启动时运行

  • 启用 cron 服务在启动时运行

任务4:修改配置文件安排 cron 任务

  • 请在 /etc/cron.d/test 文件中完成下列任务
  • 每小时第1分钟将系统平均负载信息以追加方式写入 /root/load 文件
  • 每隔3小时的30分时将磁盘剩余信息以追加方式写入 /root/du 文件
  • 每周1-5晚10点将 /data/work 目录中的内容向 /backup/data/work 同步一次
  • 每月1日和15日凌晨1:30重新启动一次 httpd 服务
  • 每天凌晨 0:30 找出 /backup 目录下 90 天以前修改过的文件并将其删除

vim /etc/cron.d/test

1 * * * * uptime>>/root/load
30 */3 * * * df -hl>>/root/du
* 22 * * 1-5 cp -r /data/work /backup/data/work
30 1 1,15 * * systemctl restart httpd
30 0 * * * find /backup -mtime +90 -type f -name "*" -exec rm -rf {} \;

任务时间结束后,( 将上述文件结果截图

  • 提示 此文件修改后需要重新 restart/reload cron 服务吗?
    • 无需重启cron

任务5:使用 crontab 命令安排 cron 任务

  • 切换 学生姓名 用户身份,完成如下任务

    • 每天 7:00 找出 ~/学生姓名 目录下尺寸最大的 10 个文件列表写入 ~/学生姓名/maxsize 文件

    • 每隔 5 天凌晨的 2 点删除 ~/学生姓名/temp 目录下的所有文件

    • 每周日凌晨的 2 点将 ~/学生姓名/data 同步到 ~/学生姓名/bak/data

      crontab -e

      0 7 * * * find ~/学生姓名 -type f -print0 | xargs -0 du -h | sort -rh | head -n 10
      0 2 */5 * * rm -rf ~/学生姓名/temp
      0 2 * * 0 cp -r ~/学生姓名/data ~/学生姓名/bak/data
      

      任务时间结束后,( 将上述文件结果截图

  • 配置仅允许 学生姓名1 和 学生姓名2 用户安排 cron 任务 ( 结果截图

    vim /etc/cron.allow

    学生姓名1
    学生姓名2
    

任务6:启动界面管理

  • 切换启动界面为文本模式(init 3)

  • 切换启动界面为图形界面(init 5)

任务7:AT任务

  • 查看系统当前时间(date)( 结果截图

  • 使用at安排一个任务1分钟后执行

$ at now + 1 minutes
at> []
at> <ctrl+D> #退出
  • 查看at任务(atq)

  • 查看任务是否成功执行( 结果截图

$ at now + 1 minutes
at> echo "姓名" > /学号.txt
at> <ctrl+D> #退出

如果成功会在根目录下生成 学号.txt ,内容为 学生姓名

习题

  1. 解释:systemctl set-default graphical.targetps -ef
  1. 写出命令:强行中止进程号为5581的进程

results matching ""

    No results matching ""