进程和计划任务

一、知识整理

1、网络客户端工具:lftpftplftgetwget

子命令:getmgetlshelp

wget [opt] …[url]

-q 静默模式

-c 断点续传

-O 保存位置

–limit-rates=  指定传输速率

登录ftp之后:lcd 在本机切换目录;get下载单个文件

ls 查看本机文件

wget 可下载http资源

passive 切换模式:

被动模式:随机端口

主动模式:使用20端口,指定命令后显示mode off

curl 纯字符界面浏览器

links  字符界面浏览器

links … –source查看源码

     –dump 查看文字,两个命令只能在centos6中使用。

[root@localhost ~]# links 10.1.0.1 --source
<title>Home Page</title>
<body>
<h1>内网服务</h1>
<h3><a href="http://10.1.0.1:8088/">GitLab</a></h3>
<h3><a href="http://10.1.0.1/zabbix">Zabbix Server (UserName:Guest,Password:)</a></h3>
<h3><a href="http://10.1.0.1/cobbler/ks_mirror">Yum Repository</a></h3>
<h3><a href="http://10.1.0.1/repofiles/">Repo Conf Files</a></h3>
<h3><a href="http://10.1.0.1/fedora-epel/">Fedora EPEL</a></h3>
<h3><a href="http://10.1.0.1/ks_files/">Kickstart Files</a></h3>
<h3><a href="ftp://10.1.0.1/pub/">FTP Server</a></h3>
</body>

2、quagga软件包,配置动态路由

service ospfd start 无法启动,缺少配置文件

cp /etc/quagga/ospfd.conf.sample  ./ospfd.conf 将例子变为配置

service ospfd start后使用vtysh进入类似于思科设备中进行配置。思科命令。

3、uptime命令:显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1/5/10分钟的平均负载,一般不会超过1

[root@localhost ~]# uptime
 19:49:41 up 14:36,  2 users,  load average: 0.00, 0.00, 0.00

系统平均负载是指特定时间间隔内运行队列中的平均进程数。如果每核当前活动进程数不大于3的话,那么系统的性能良好。如果每核任务数大于5,则有严重问题。如果是双核cpu,当Load Average6的时候说明机器已经被充分使用了。

4、pmap命令:进程对应的内存映射;

-x 显示详细格式的信息

[root@localhost init.d]# pmap -x 1
1:   /usr/lib/systemd/systemd --switched-root --system --deserialize 21
Address           Kbytes     RSS   Dirty Mode  Mapping
00007f5bcab6a000      16       8       0 r-x-- libuuid.so.1.3.0
00007f5bcab6e000    2044       0       0 ----- libuuid.so.1.3.0
00007f5bcad6d000       4       4       4 r---- libuuid.so.1.3.0
00007f5bcad6e000       4       4       4 rw--- libuuid.so.1.3.0
00007f5bcad6f000     224      36       0 r-x-- libblkid.so.1.1.0

另一种查看方式:cat /proc/PID/maps

5、所谓中断是指CPU对系统发生的某个事件做出的一种反应,CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。

中断可分为三类,第一类是由CPU外部引起的,称作中断,如I/O中断、时钟中断、控制台中断等。第二类是来自CPU的内部事件或程序执行中的事件引起的过程,称作异常,如由于CPU本身故障(电源电压低于105V或频率在4763Hz之外)、程序故障(非法操作码、地址越界、浮点溢出等)等引起的过程。

第三类由于在程序中使用了请求系统服务的系统调用而引发的过程,称作“陷入”(trap,或者陷阱)。前两类通常都称作中断,它们的产生往往是无意、被动的,而陷入是有意和主动的。

Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入CPU,就可以引发一个中断请求信号,我们就把它叫做时钟中断。“时钟中断”是特别重要的一个中断,因为整个操作系统的活动都受到它的激励。系统利用时钟中断维持系统时间、促使环境的切换,以保证所有进程共享CPU;利用时钟中断进行记帐、监督系统工作以及确定未来的调度优先级等工作。可以说,“时钟中断”是整个操作系统的脉搏。

6、为提高效率,并行运行程序的方法:方法一:

将几个脚本名写入一个文件中执行,格式如下:

f1.sh &

    f2.sh &

f3.sh &

方法二:命令行中:(f1.sh &);(f2.sh &);(f3.sh &) 相当于三个子进程

[root@localhost testdir]# (./f1.sh&);(./f2.sh&);(./f3.sh&)
bbb
aaa
[root@localhost testdir]# ccc

方法三:匿名函数{  f1.sh&  f2.sh &  f3.sh & }

[root@localhost testdir]# { ./f1.sh&  ./f2.sh&  ./f3.sh& }
[1] 22131
[2] 22132
[3] 22133
[root@localhost testdir]# aaa
bbb
ccc
[1]   完成                  ./f1.sh
[2]-  完成                  ./f2.sh
[3]+  完成                  ./f3.sh

二、命令详解及事例

1、ps命令:列举进程

支持三种方式的选项:

unix选项:-a

BSD选项:a

GUN选项:–help

直接使用显示当前终端中的进程

a 所有终端所有进程

x 包括不链接终端的进程

u 显示进程所有者信息

f 显示进程的父进程

o 属性,选项显示定制的信息

pidcomm%cpu%memstatettyeuserruser

STAT:进程状态:

R:running

S:interruptable sleeping

D:uninterruptable sleeping

T:stopped

Z:zombie

+:前台进程

l:多线程进程

N :低优先级进程

< :高优先级进程

ssession leader,会话(子进程)发起者

常用组合:-ef  -eFH

-e 显示所有进程

-f 显示完整格式程序信息

-F 显示更完整格式的进程信息

-H 以进程层级格式显示进程相关信息

常用自定义组合:

-eo pidtidclassrtprionipripsrpcpustatcomm

-axo stateuidruidttytpgidsesspgrpppidpidpcpucomm

2、pgrep命令:ps  grep按照预定义的模式,相当于按照给定选项将进程grep出来

-u uid effective user,生效者

-U uidreal user,真正发起运行命令者

-t terminal:与指定终端相关的进程

-l 显示进程名

-a 显示完整格式的进程名

-P pid 显示父进程为此处指定的进程的进程列表

pidof命令:查看进程的进程号

3、top命令:

有许多内置命令:P(大写):以占据的cpu百分比排列

M:占据内存百分比显示

T:累积占据cpu时长

首部信息显示:uptime信息:l命令

taskscpu信息:t命令

cpu分别显示:1(数字)

memory信息:m命令

修改刷新时间间隔:s

终止指定进程:k

保存文件W

栏位信息:us用户空间;sy内核空间;ni调整nice时间;id空闲;wa等待IO时间;hi硬中断;si软中断(模式切换);st虚拟机占用的时间。

PID任务进程IDPPID父任务IDRUSER任务所有者真实名;UID任务所有者IDUSER任务所有者名;GROUP任务所有者组名;TTYPR优先级(priority);%CPU%MEMS进程状态;TIME+cpu时间,精确到秒)cpu time

htop命令:

选项:-d # 指定刷新时间,默认是3

-b 以批次方式

-n # 显示多少批次

-d # 指定延迟时间

-u UserName 仅显示指定用户的进程

-s COLUME 以指定字段进行排序

子命令:s 跟踪选定进程的系统调用

l 显示选定进程打开的文件列表

a 将选定的进程绑定至某指定cpu核心

t 按照cpu占用排序

4、vmstat命令:虚拟内存信息

每两秒刷新一次,一共显示五次:

[root@localhost init.d]# vmstat 2 5
procs   -----------memory----------      ---swap--   -----io----   -system-- -  -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs   us sy id wa st
 1  0    0 712888   1968 177292    0    0     1     0   11   12  0  0 100  0  0
 0  0    0 712888   1968 177292    0    0     0     0   64   82  0  0 100  0  0
 1  0    0 713012   1968 177292    0    0     0     0   61   83  0  0 100  0  0
 0  0    0 713012   1968 177292    0    0     0     0   55   76  0  0 100  0  0
 0  0    0 713012   1968 177292    0    0     0     0   61   90  0  0 100  0  0

信息意义:procsr 等待运行的进程个数,和核心数有关;b 处于不可中断睡眠的进程个数(被阻塞的队列的长度)。

memoryswpd 交换内存的使用总量;free 空闲物理内存总量;buffer 用于缓冲的内存总量;cache 用于缓存的内存总量。

swapsi 从磁盘交换进内存的数据速率;so 从内存交换至磁盘的数据速率。此处的IO是以内存为参考。

systemin 中断(interrupts)数,包括时钟中断;cs 进程切换次数(context switch)。

cpuus 显示用户进程消耗cpu的时间百分比,此值过大说明需要优化;sy 内核进程消耗cpu的时间百分比,如果us+sy值过大说明cpu资源不足;id 显示cpu处在空闲状态的时间本分比;wa 表示IO等待所占cpu时间百分比,一般认为id+us+sy=100st 虚拟机占用的百分比。

5、glances工具:

glances是一个由Python编写,使用psutil库来从系统抓取信息的基于curses开发的跨平台命令行系统监视工具,基于GPL开源协定。我们能够设置关键值及相应的标签(carefulwarningcritical),然后glances会帮我们用不同颜色标出系统达到某个瓶颈的信息。

blob.png

常用选项:-b byte为单位显示网卡数据速率

-d 关闭磁盘I/O模块

-f /path/to/somefile 设定输入文件位置

-o {THML|CSV} 输出格式

-m 禁用mount模块

-n禁用网络模块

-t # 延迟时间间隔

-1(数字1) 每个cpu的相关数据单独显示

内置命令:a 对进程自动排序

c cpu百分比排序

m 按内存百分比排序   p 按进程名字母顺序排序

i 按读写频率(I/O)排序  d 显示和隐藏I/O统计信息

f 显示和隐藏文件系统的统计信息  n 显示和隐藏网络接口统计信息

s 显示和隐藏传感器统计信息   y 显示和隐藏硬盘温度统计信息

l 显示和隐藏日志   b 切换网络I/O单位(byte|bits

w 删除警告日志   x 删除警告和严重日志

1 切换全局CPU使用情况和每个cpu使用情况,类似选项1

t 以组合形式浏览网络I/O

u 以累计形式浏览网络I/O

q ESC 退出    h 帮助

glances基于C/S架构,因此可以远程使用:方法如下:

首先在本机开启glances -s(启动客户端/服务器模式)

[root@localhost init.d]# glances -s
Glances服务器启动了 0.0.0.0:61209

然后在客户端上执行glances -c -P #.#.#.#连接服务器。

注意:在客户端模式可以通过-p #来指定服务器端口;在服务器模式可以通过-B #.#.#.#指定绑定地址,也可以通过-p #来绑定监听的TCP端口;默认的绑定地址是0.0.0.0,会监听所有网络接口的指定端口;限制的阈值由服务器决定;可以在命令行用-P来设置密码。

1、dstat命令:系统资源统计

-c 显示cpu相关信息

-C #,#,..,total

-d 显示disk相关信息

-D totalsdasdb..

-g 显示page相关统计数据

-m 显示memory相关统计数据

-n 显示network相关统计数据

-p 显示procs相关统计数据

-r 显示io请求相关统计数据

-s 显示swapped相关统计数据

[root@localhost glances]# dstat 
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0 100   0   0   0|4136B  637B|   0     0 |   0     0 |  53    58 
  0   0 100   0   0   0|   0     0 | 812B  826B|   0     0 |  52    57 ^C
[root@localhost glances]# dstat -c 
----total-cpu-usage----
usr sys idl wai hiq siq
  0   0 100   0   0   0
  0   0 100   0   0   0^C

支持更多长选项:–tcp  –udp  –unix  –raw  –socket  –ipc(进程间通信) –top-cpu最占用cpu的进程; –top-io   –top-mem   –top-latency显示延迟最大的进程,需要开启模块dstat_top_latency

[root@localhost glances]# dstat --tcp
----tcp-sockets----
lis act syn tim clo
  4   2   0   0   0
  4   2   0   0   0^C
[root@localhost glances]# dstat --unix
--unix-sockets-
dgm str lis act
 20 113  31  82
 20 113  31  82^C
[root@localhost glances]# dstat --ip
--sysv-ipc-
msg sem shm
  0   0   0
  0   0   0^C
[root@localhost glances]# dstat --top-io
----most-expensive----
     i/o process      
bash         39k   43B
sshd: root@ 146B  196B^C

2、常用信号:

 1SIGHUP 无须关闭进程而让其重读配置文件

  2SIGINT 中止正在运行的进程,相当于ctrl+c

(9) SIGKILL 强制停止

(15) SIGTERM 终止正在运行的进程

(18) SIGCONT 继续运行

(19)  SIGSTOP 后台休眠

8、将进程放入后台执行 & ctrl + z

fg %# front ground 把指定的后台作业调回前台

bg %# :让送往后台的作业在后台继续运行

kill %# :终止指定的作业

kill命令:

-SIGNAL

-u uid 生效者的uid

-U uid 真正发起命令者

-t terminal 与指定终端相关的进程

-l 显示进程名

-a 显示完整格式的进程名

-P pid 显示父进程为此处指定的进程的进程列表

9、任务计划:

batch命令:系统自行选择空闲时间执行指定的任务

at命令:at [] TIME

TIMEHH:MM[yyyy-mm-dd]noonmidnightteatimetomorrownow+#{minutes,…,weeks}

HH:MM 02:00在今日的HH:MM执行,时间过则第二天执行

指定具体时间04:00 2016-09-2004pm March 1717:20 tomorrow

-V显示版本信息

-l列出指定队列中等待运行的作业,相当于atq

-d删除指定作业,相当于atrm

-c查看具体作业任务

-f /PATH/FILE 从指定的文件中读取任务

-m 当任务被完成后,给用户发邮件,即使没有标准输出。

作业指定命令的结果中的标准输出和错误均会以邮件的形式发给相关用户,包括cron。

at命令可以使用交互式;输入重定向;at -f FILE三种方式执行。 依赖于atd服务,其队列放在/var/spool/at目录中。

[root@localhost testdir]# at -f f1.sh 22:05
job 5 at Wed Sep  7 22:05:00 2016
[root@localhost testdir]# at 22:26 <<EOF 
> echo bbb
> EOF
job 6 at Wed Sep  7 22:26:00 2016
[root@localhost testdir]# at 22:06
at> echo ccc
at> <EOT>
job 7 at Wed Sep  7 22:06:00 2016
您在 /var/spool/mail/root 中有新邮件
[root@localhost testdir]# mail 
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 5 messages 2 new
    1 user@localhost.local  Tue Jul 26 10:01 138/5232  "[abrt] full crash report"
    2 root    Wed Sep  7 09:53  15/515   "Output from your job        1"
    3 user@localhost.local  Wed Sep  7 16:10 2189/149113 "[abrt] full crash report"
>N  4 root    Wed Sep  7 22:05  14/501   "Output from your job        5"
 N  5 root    Wed Sep  7 22:06  14/501   "Output from your job        7"

白名单和黑名单:/etc/at.allow/etc/at.deny。默认只有at.deny,当添加了allow后,没有在allow中的用户皆不能使用at;若两个文件都不存在,只有root能使用at

10、周期性任务计划cron

cronie主程序包;anacron补充程序,若有此程序,则cronie中的任务在该运行的时间点未能正常运行,则随后会再次执行一次任务。

日志文件:/var/log/cron

系统任务文件,定义格式:/etc/crontab,格式中的时间是或关系如0 2 1,10,20 * 0,6,在给定的时间都执行。

@reboot   Run once after reboot

@yearly   0 0 1 1 *

@annually  0 0 1 1 *

@monthly  0 0 1 * *

@weekly   0 0 * * 0

@daily   0 0 * * *

@hourly   0 * * * *

系统的计划任务:

[root@localhost testdir]# cat /etc/cron
cron.d/  cron.daily/  cron.deny  cron.hourly/  cron.monthly/  crontab   cron.weekly/

/etc/anacrontab配置文件负责执行hourlydailyweeklymonthly几个目录的系统任务,执行任务后更新/var/spool/anacron文件的时间戳。

centos6中使用/etc/cron.daily/tmpwatch定时清除临时文件。每个用户都有专用的cron任务文件/var/spool/cron/USERNAME,目录有suid权限。使用crontab命令:

-l 列出所有任务

-e 编辑任务

-r 移除所有任务

-i -r一同使用,以交互式模式移除指定任务

-u USER root可以运行,指定用户管理cron任务。使用此命令后,/var/spool/cron/下的以用户名命名的文件属主属组会变成root,当用户再此使用crontab -e命令编辑后,会将root更改后的文件覆盖。

cron任务中%有特殊用途,如果在命令中使用则需转义;若放入单引号中,也可不转义。

在秒级运行任务:在分钟级使用sleepusleep(微秒μs)。sleep 默认秒,m分钟,h小时,d天。

计划任务中的命令都不支持别名,需要更改配置文件或使用原名。

一、课后练习

1、每四小时备份一次/etc目录至/backup,保存的文件名称格式为“etc-yyyy-mm-dd-HH.tar.xz

* */12 * * * root date=$(date +%Y-%m-%d-%H) | tar zcf /testdir/etc-$date.tar.xz /etc

2、每周2,4,7备份/var/log/messages文件至/logs目录中,文件名如“messages-yyyymmdd”。

0 0 * * 2,4,7 root date=$(date +%Y%m%d) | tar testdir/secure-$date.tar.xz /var/log/secure

3、每两小时取出当前系统/proc/meminfo文件中以SM开头的信息追加至文件/tmp/meminfo.txt

0 */4 * * *  tar -zcf /testdir/etc`date +%F-%H`.tar.xz /etc &> /dev/null

4、工作日时间,每十分钟执行一次磁盘空间检查,一旦发小任何分区利用率高于80%,就执行wall报警。

*/10 * * * * root ./testdir/test4.sh

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/45663