Linux的进程管理和计划任务
系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,Linux的引导过程完了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。
Linux操作系统的引导流程包括以下阶段:开机自检、MBR引导、GRUB菜单、加载Linux内核、INIT进程初始化
(一)
init进程负责完成一系列的初始化过程
-
读取配置文件"/etc/inittab"
-
根据配置内容执行脚本文件“/etc/rc.d/rc.sysinit”
-
通过“/etc/rc.d/rc”控制应该启动哪些程序和服务
-
运行终端程序“/sbin/mingetty”
决定系统初始化过程的关键在于init进程及其配置文件“/etc/inittab”,决定Linux系统启动后自动运行那些程序的关键在于“/etc/rc.d/rc”脚本,rc脚本根据不同的系统运行级别选择执行不同的目录
init进程的PID永远为1,不允许被轻易终止。
查看“/etc/inittab”文件的有效配置行
[root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$"
id:3:initdefault:
四个字段分别为标记、运行级别、动作类型、程序或脚本
1.标记id:由1-4个字符组成,唯一
2.运行级别runlevel:
0 关机
1 单用户模式,不需密码登录,用于维护
3 字符界面多用户模式,大多数服务器运行此级别
5 图形界面多用户模式
3.动作类型action:
initdefault 默认进入的运行级别
sysinit 初始化操作脚本
wait init进程等待对应脚本操作完成后,再执行其他操作
ctrlaltdel 按下ctrl+alt+delet的操作
powerfail 断电时采用何种动作
powerokwait 电源恢复时采用何种动作
respawn 进程被终止,则重启
4.程序或脚本process:对应的实际操作
rc.sysinit脚本文件位于“/etc/rc.d/rc.sysinit”,在inittab中配置好的
rc脚本文件:
在“/etc/rc.d/rc0.d”~“/etc/rc.d/rc6.d”目录中,保存一些链接文件,所连接的原始文件位于“/etc/rc.d/init.d”目录中。以S开头的文件表示启动,以K开头的文件表示终止。位于“/etc/rc.d/init.d”中的服务脚本可以通过service命令进行管理
查看network服务状态
[root@localhost ~]# service network status
配置设备:
lo eth0
当前的活跃设备:
lo eth0
关闭打印机服务
[root@localhost ~]# service cups stop
停止 cups:[确定]
查看运行级别
[root@localhost ~]# runlevel
N 3
切换运行级别
[root@localhost ~]# init 5
[root@localhost ~]# runlevel
3 5
设置服务启动或关闭(ntsysv、chkconfig)
ntsysv --level 指定运行级别
具有图形界面,空格切换启动状态,*自启动,空格不自启动,适合设置大量服务的启动状态
chkconfig --list 指定服务名
--level 指定运行级别 on|off 开启或关闭
查看network服务在各运行级别中的状态
[root@localhost ~]# chkconfig --list network
network 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
将network服务在运行级别2、4中启动状态设为off
[root@localhost ~]# chkconfig --level 24 network off
[root@localhost ~]# chkconfig --list network
network 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
(二)进程管理
ps 查看静态进程
aux 显示当前终端所有用户所有进程信息
-elf 长格式显示完整信息
查看系统中进程
[root@localhost ~]# ps
PID TTY TIME CMD
3701 pts/3 00:00:00 bash
3983 pts/3 00:00:00 ps
top 查看动态进程,每3秒刷新一次
[root@localhost ~]# top
top - 18:05:53 up 9:06, 4 users, load average: 0.00, 0.00, 0.00
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 744672k total, 273404k used, 471268k free, 53088k buffers
Swap: 1507324k total, 0k used, 1507324k free, 70388k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3991 root 20 0 15032 1188 924 R 0.3 0.2 0:00.01 top
1 root 20 0 19356 1536 1228 S 0.0 0.2 0:01.29 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
pgrep 查询进程信息
-l
-U 对应用户
-t 对应终端
查询init进程的PID
[root@localhost ~]# pgrep "init"
1
查询进程名中包含“log”的PID,并列出进程名
[root@localhost ~]# pgrep -l "log"
1456 rsyslogd
1752 mcelog
ptree 查看进程树
控制进程
手工启动:前台启动和后台启动
后台启动:在命令后加&,将命令放到后台运行
调度启动
改变进程运行方式
将进程调入后台:Ctrl+D
查看后台进程:jobs -l
将后台进程恢复到前台:fg +编号
终止进程:
kill -9 PID
killall -9 进程名
pkill -9 -U 用户名 -t 终端
(三)计划任务管理at、crontab
1.at 一次性任务,前提是atd服务启动
[root@localhost ~]# service atd status
atd (pid 1904) 正在运行...
只设置日期是该日期的当前时间执行
在当天晚上八点执行任务,统计root用户集成数量并保存到/tmp/ps.root中,Ctrl+D提交
[root@localhost ~]# at 20:00
at> pgrep -U root | wc -l >> /tmp/ps.root
at> <EOT>
job 2 at 2017-03-30 20:00
查看任务列表,显示未执行的
[root@localhost ~]# atq
2 2017-03-30 20:00 a root
按照编号删除任务
[root@localhost ~]# atrm 2
2.crontab 周期性任务 前提是crond服务启动
[root@localhost ~]# service crond status
crond (pid 1889) 正在运行...
-e 编辑计划任务列表
-u 属于哪个用户
-l 列表显示
-r 删除任务列表(注意是全部删除!!)
打开计划任务编辑页面,与vi操作相同,命令要写路径
每隔五天清空ftp服务器公共目录中的数据,每周一三五下午五点半自动备份
[root@localhost ~]# crontab -e
1 0 * */5 * * /bin/rm -rf /var/ftp/pub/*
2 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
查看任务列表
[root@localhost ~]# crontab -l
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
删除计划任务列表,可以看到两条任务都被删除,如果只想删除一条,使用crontab -e来编辑
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root