您的位置:首页 > 运维架构 > Linux

Linux的进程管理和计划任务

2017-03-31 09:31 609 查看
系统引导是操作系统运行的开始,在用户能够正常登录到系统之前,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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息