管理进程和计划任务
本次依然介绍Linux系统管理基础部分,内容为Linux的引导过程和运行级别、管理进程和服务、设置任务的计划运行,和前面一样,只是简单介绍,深入的部分我也继续在学习,希望和大家共同学习,如有错误,请指点。
一、Linux的引导流程
1、系统启动的引导流程
首先系统开机自检,然后是计算机开机后访问硬盘并读取首个扇区的MBR(即主引导目录),(备注:主引导扇区内部结构,其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息,是数据信息的重要入口。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性的重建数据结构信息后才可能重新访问原先的数据。)读取MBR记录后,这时进入系统选择界面,选择好某个操作系统后,则开始加载内核,接着从INIT进程获得系统控制权,即进入初始化过程,之后则读相应的配置文件,具体引导过程如下:
系统初始化进程及文件简单介绍
1)、INIT进程与配置文件:
INIT进程:由Linux内核加载运行/sbin/init程序,是系统中第一个进程,也是内核加载的第一个程序,PID(进程标识符)永远是1;配置文件是:/etc/inittab
[root@localhost ~]# grep -v "^#" /etc/inittab | grep -v "^$" ==>查看这个文件时过滤掉注释行和空行
id:5:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon
[root@localhost ~]#
各字段的含义:
id |
用于在inittab文件中唯一标识一个配置记录 |
runlevels |
用于指定该记录在哪些运行级别中运行 |
action |
用于描述记录将执行哪种类型的动作 |
process |
用于设置启动进程所执行的命令 |
initdefault:设置初始化系统后默认进入的运行级别
sysinit:设置系统初始化的操作脚本
wait:init进程将等待该行配置所对应的脚本操作完成后,再继续执行其他操作
ctrlaltdel:设置当用户按下Ctrl+Alt+Delete组合键后的操作
powerfail:设置当系统收到断电信号(使用不间断电源)时采取何种动作
powerokwait:设置当系统收到恢复供电信号时采取何种动作
respawn:一旦该行配置所对应的进程被终止,则重新启动该进程
3)、其它系统初始化文件简介
[root@localhost ~]# vi /etc/inittab
进入之后有这样一行:
id:5:initdefault: ==>这个5的意思就是设置开机后自动进入图形模式
[root@localhost ~]# runlevel ==>查看当前运行级别 N 5 ==>第一个字符“N”表示之前未切换过运行级别 [root@localhost ~]# init 3 ==>将运行级别改为3 [root@localhost ~]# runlevel ==>显示之前和改后的级别 5 3 [root@localhost ~]# init 6 ==>重启(这里我按了ctrl + C ,不然系统要重启了) [root@localhost ~]# init 0 ==>系统关机
3、系统服务的启动控制
1)、查看系统服务的启动状态 chkconfig --list [服务名称]
如查看network这个服务的启动状态,则使用:chkconfig --list network
2)、服务脚本位置:/etc/init.d ——> /etc/rc.d/init.d
(/etc/init.d是一个符号链接,目标为 /etc/rc.d/init.d,通过这两个目录都可以找到系统服务对应的脚本文件)
3)、设置系统服务的启动状态 chkconfig --level 级别列表 服务名 on|off
(解释:运行级别列表:可以是235、 35、5等等形式;服务名称:注意名称要正确,如果忘记了可查看/etc/init.d/目录下的脚本名 ;On|off: 启动或关闭启动状态)
如设置network服务在2345级别下为启动状态:chkconfig --level 2345 network on
再次查看它的服务时则可以看到network这个服务在各个模式下的启用状态
4)、ntsysv系统服务管理工具——ntsysv [--level 级别列表]
此命令进入类似图形化的界面,可以集中对所有的系统服务进行设置
使用和chkconfig命令和ntsysv命令跳转服务启动状态的对比说明:
1)当需要设置个别服务在不同运行级别的启动状态时,选择使用chkconfig命令要更有效率
2)当需要同时设置大量服务的启动状态时,选择使用ntsysv配置工具要更加适合
二、进程管理
1、程序与进程的区别
程序:保存在硬盘、光盘等介质中的可执行代码和数据;是静态保存的代码
2、查看进程信息
1)、ps命令
ps -elf ==>以长格式显示
2)、top命令
[root@localhost ~]# pgrep "init" 1 [root@localhost ~]# pgrep -l "log" 2538 syslogd 2541 klogd 3221 login [root@localhost ~]# pgrep -l -U teacher -t tty1 27483 bash 27584 vim
4)、pstree命令
[root@localhost ~]# ls -l & [1] 28453 ==>后台任务序号为1(这个要记住,因为唤醒时要用到),PID号为28453
[root@localhost ~]# kill 3792 ==>此时另一个额终端将退出top命令
若杀掉所有正在打开的文本文件:killall -9 geidt
终止进程的运行——pkill命令
[jzhou@localhost ~]$ w | grep -v "root" ==>查看除root用户外哪些用户在使用终端 11:17:38 up 1:18, 3 users, load average: 0.14, 0.05, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT jzhou :0 - 10:01 ?xdm? 18.56s 0.22s /usr/bin/gnome- jzhou pts/1 :0.0 11:17 0.00s 0.02s 0.01s w jzhou pts/2 :0.0 11:17 10.00s 0.01s 0.01s bash [jzhou@localhost ~]$
上述pts有2个,是因为我打开了两个terminal,并且都是以jzhou用户登录的,现在我要停止pts/1里的所有进程:
[jzhou@localhost ~]$ pkill -9 -t pts/1 ==>这个命令一旦运行,则pts/1这个终端将立即关闭
再次查看时只有一个pts/2了:
[jzhou@localhost ~]$ w | grep -v "root" 11:22:13 up 1:22, 2 users, load average: 0.09, 0.12, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT jzhou :0 - 10:01 ?xdm? 18.56s 0.22s /usr/bin/gnome- jzhou pts/2 :0.0 11:17 00.00s 0.01s 0.00s w [jzhou@localhost ~]$
(我觉得这篇博文讲的也不错:http://blog.csdn.net/liyangbing315/article/details/4794708)
三、计划任务管理
1、at命令—— 一次性任务设置
[root@localhost ~]# service atd start ==>启动atd服务 [root@localhost ~]# at 11:35 at> reboot at> <EOT> ==>按ctrl + D 提交任务,则自动进入这里 job 1 at 2013-03-16 11:35 [root@localhost ~]# atq 1 2013-03-16 11:35 a root
==>接下来我郁闷了好久,因为等了3分钟还没有结果,我是11:30分设置的这个计划任务,按道理早应该重启了,之后才发现,原来我虚拟机的时钟和我自己的电脑不同步,我自己的电脑快了5分钟,啊。。。白白等了N个3分钟还在不断找原因,执行了date命令才发现原来现在才11:30。。。
2、crontab命令
[root@localhost ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts ==>这里分别设置了每小时每天每星期每月定期执行的任务脚本分别存放在这些目录中 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
注意:
启用周期性任务有一个前提条件,即对应的系统服务crond必须已经运行;
全局配置和系统默认配置中的内容一般不需要用户去修改,用户只需设置/var/spool/cron/目录下与本帐号同名的文件即可
[root@localhost ~]# crontab -e 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 * */5 * * /bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
2)、示例2:jzhou用户
[root@localhost ~]# crontab -e -u jzhou 55 23 * * 7 /bin/cp /etc/passwd /home/jzhou/pwd.txt
3)、示例3:
[root@localhost root]# crontab -l 50 7 * * * /sbin/service sshd start 50 22 * * * /sbin/service sshd stop 0 * */5 * * /bin/rm -rf /var/ftp/pub/* 30 7 * * 6 /sbin/service httpd restart 30 17 * * 1,3,5 /bin/tar jcvf httpdconf.tar.bz2 /etc/httpd
[root@localhost root]# crontab -l -u jzhou 55 23 * * 7 /bin/cp /etc/passwd /home/jzhou/pwd.txt [root@localhost root]# crontab -r -u jzhou [root@localhost root]# crontab -l -u jzhou no crontab for jzhou [root@localhost root]#
从上面这3个例子简单总结一下crontab任务的配置格式:
(1) 时间周期设置: 任务内容设置:
50 3 2 1 * run_command
分钟 小时 日期 月份 星期 命令
字段 |
说明 |
分钟 |
取值为从0到59之间的任意整数 |
小时 |
取值为从0到23之间的任意整数 |
日期 |
取值为从1到31之间的任意整数 |
月份 |
取值为从1到12之间的任意整数 |
星期 |
取值为从0到7之间的任意整数,0或7代表星期日 |
命令 |
要执行的命令或程序脚本 |
前5个字段指定任务重复执行的时间规律,第6个字段用于指定具体的任务内容