定时任务和进程

一,linux定时任务
1,概念

未来的某个时间执行一次任务,或者周期性执行某个任务,执行结果会通过邮件通知。

2,分类

定时任务:at batch
周期性任务:contab

3,系统任务调度

指系统周期内所要执行的任务,系统任务调度的配置文件为:/etc/crontab

4,用户任务调度

指用户定期所要执行的文件,用户任务调度的配置文件为:/var/spool/cron

5,mail发送格式

mail -s “邮件主题” -c “抄送地址” -b“密送地址” -f 发送人地址 -F发送人姓名 < “test”
echo “test” | mail -s test 发送地址

6,at命令
(1)时间定义

hh:mm 例如:12:00
noon,teatime A
M,PM,8am,9pm
2019-8-11,2019/8/11
+5minutes,hours,days,weeks today,tomorrow

(2)语法结构
用法: at 选项 参数

-q使用指定队列queue存储
-f从文件中读取
l,atq列出任务
-d,atrm删除待处理作业
-v列出已执行未被删除的任务
-V版本号
-c查看作业内容

实例:

1,[root@demo3 ~]# at now +4 minutes (创建一个任务)
at> echo "hello" >test
at> <EOT>
job 4 at 2019-08-14 18:14
You have new mail in /var/spool/mail/root
2,[root@demo3 ~]# atq   (列出任务)
4       2019-08-14 18:14 a root
3,[root@demo3 ~]# at -c 4    (查看作业内容)
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=demo3; export HOSTNAME
……
${SHELL:-/bin/sh} << 'marcinDELIMITER0a37b906'
echo "hello" >test
marcinDELIMITER0a37b906
4,[root@demo3 ~]# at -V   (查看版本号)
at version 3.1.10
5,[root@demo3 ~]# atrm 5   (删除待处理作业)

7,crontab命令
(1)查看/etc/crontab配置文件
在这里插入图片描述
(2)时间表示法:

(1)特定值
如:一月一号的8:40执行一次——40 8 1 1 *
(2)*
如:每分钟执行一次——* * * * *
(3)连续值:9-17
如:早上八点到12点执行一次——0 8-12 * * *
(4)离散值:8,10,12
如:每周的周一,周三,周五,周日12点执行一次——0 12 * * 1,3,5,7
(5)定义时间点 时间步长(注意:定义步长需要能被整除)
如:早上八点到12点每隔一小时执行一次——0 8-12/1 * * *

(3)crontab语法结构

-e编辑任务
-l列出任务列表
-r移除任务
-i移除时确认,与-r一起使用
-u用户
[root@demo3 ~]# crontab -e    (编辑任务)
no crontab for root - using an empty one
crontab: installing new crontab
[root@demo3 ~]# crontab -l     (列出任务列表)
#列出test的的列表
*/1 * * * * ls ./test
#列出test的所有隐藏列表
0 8-12 * * * ll -a ./test
[root@demo3 ~]# crontab -ri   (删除任务,-i表示移除前询问)
crontab: really delete root's crontab? y
You have new mail in /var/spool/mail/root

注:在做计划任务时要规范:

1,脚本要规范,脚本存放位置要规范,便于维护
2,定时任务要写注释
3,执行脚本要带绝对路径
4,执行结果的标注输出或者错误输出>/dev/null
5,可以以命令执行完成的任务,也要写在脚本中
6,分用户执行

二,进程
1,程序

定义:一组指令以及参数集合,按照相应的逻辑控制计算计完成特性任务。
linux程序组成:系统,用户,固件
特点:静态的,封闭的。
程序与进程关系:程序——>运行——>进程1,进程2…

2,进程

定义:运行的程序,动态。
特点:动态的;具有生命周期,状态 ;并发行;交互性
操作系统以进程为单位分配系统资源
具有独立的地址空间,运行状态 ;
程序与进程关系:一个程序可产生多个进程 ;

3,线程

特点:
(1)在linux中,每个进程,线程都有其独立的资源集;
(2)线程把整个任务完成后才能运行
线程与进程关系:
(1)一个进程中可有多个线程,一个线程只被一个进程拥有
(2)线程无法独立运行,但每个线程都有程序的入口,执行序列,程序的出口,它必须组成进程才能被执行;

4,进程的生命周期
在这里插入图片描述
注:在子进程运行过程中可能会产生僵死状态和孤儿状态:

僵死状态:子进程终止退出,它的资源已被释放,但是父进程没有调用wait()系统,取得子进程的终止状态。此时子进程虽然退出,但系统进程表中仍保留着它的一些信息。
孤儿状态:在子进程还未退出前,父进程就已退出。

5,进程的管理工具
(1)pstree 进程树 —— 查看进程之间的关系
《1》pstree

[root@demo3 ~]# pstree
init─┬─atd
     ├─auditd───{auditd}
     ├─crond
     ├─login───bash
     ├─master─┬─pickup
     │        └─qmgr
     ├─5*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd─┬─sshd───bash───pstree
     │      └─sshd───sftp-server
     └─udevd───2*[udevd]

《2》pstree -p:显示pid

[root@demo3 ~]# pstree -p      (显示PID)
init(1)─┬─atd(1393)
        ├─auditd(1172)───{auditd}(1173)
        ├─crond(1378)
        ├─login(1406)───bash(1424)
        ├─master(1364)─┬─pickup(1724)
        │              └─qmgr(1375)
        ├─mingetty(1408)
        ├─mingetty(1410)
        ├─mingetty(1414)
        ├─mingetty(1418)
        ├─mingetty(1420)
        ├─rsyslogd(1194)─┬─{rsyslogd}(1195)
        │                ├─{rsyslogd}(1197)
        │                └─{rsyslogd}(1198)
        ├─sshd(1284)─┬─sshd(1439)───bash(1445)───pstree(1783)
        │            └─sshd(1443)───sftp-server(1462)
        └─udevd(510)─┬─udevd(1415)
                     └─udevd(1416)

《3》pstree -u:显示每个进程所属账号名字

[root@demo3 ~]# pstree -u     (显示每个进程所属账号名字)
init─┬─atd
     ├─auditd───{auditd}
     ├─crond
     ├─login───bash
     ├─master─┬─pickup(postfix)
     │        └─qmgr(postfix)
     ├─5*[mingetty]
     ├─rsyslogd───3*[{rsyslogd}]
     ├─sshd─┬─sshd───bash───pstree
     │      └─sshd───sftp-server
     └─udevd───2*[udevd]

(2)ps——显示进程信息
《1》 -a显示所有进程

[root@demo3 ~]# ps -a
   PID TTY          TIME CMD
  1785 pts/0    00:00:00 ps

《2》 -u:显示用户为主的进程

[root@demo3 ~]# ps -u
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       1408  0.0  0.0   4064   588 tty2     Ss+  17:01   0:00 /sbin/mingetty
root       1410  0.0  0.0   4064   592 tty3     Ss+  17:01   0:00 /sbin/mingetty
root       1414  0.0  0.0   4064   592 tty4     Ss+  17:01   0:00 /sbin/mingetty
root       1418  0.0  0.0   4064   592 tty5     Ss+  17:01   0:00 /sbin/mingetty
root       1420  0.0  0.0   4064   592 tty6     Ss+  17:01   0:00 /sbin/mingetty
root       1424  0.0  0.1 108312  1888 tty1     Ss+  17:01   0:00 -bash
root       1445  0.0  0.1 108316  1956 pts/0    Ss   17:02   0:00 -bash
root       1798  0.0  0.1 110236  1176 pts/0    R+   20:02   0:00 ps -u
……

《3》 -x:和au配合使用,显示完整信息

[root@demo3 ~]# ps -aux
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19232  1484 ?        Ss   17:00   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    17:00   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    17:00   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    17:00   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    17:00   0:00 [stopper/0]

《4》 -l:将pid的信息较长较详细的列出来

[root@demo3 ~]# ps -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0   1445   1439  0  80   0 - 27079 wait   pts/0    00:00:00 bash
4 R     0   1801   1445  0  80   0 - 27033 -      pts/0    00:00:00 ps

(3)pgrep ——查找进程信息
《1》 -l:同时显示进程名和pid

[root@demo3 ~]# pgrep -l httpd
1861 httpd
1862 httpd
1863 httpd
1864 httpd

《2》 -o:匹配多个进程时,显示进程号最小的

[root@demo3 ~]# pgrep -l -o httpd
1861 httpd

《3》 -n:匹配多个进程时,显示进程号最大的

[root@demo3 ~]# pgrep -l -n httpd
1864 httpd

(4)kill ——杀死某个进程
用法: kill 选项 pid
《1》 -9 :强制终止进程

[root@demo3 ~]# ps -ef |grep httpd
daemon     1862      1  0 20:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon     1863      1  0 20:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon     1864      1  0 20:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
root       1967   1808  0 20:37 pts/1    00:00:00 grep httpd
[root@demo3 ~]# kill -9 1862
[root@demo3 ~]# ps -ef |grep httpd
daemon     1863      1  0 20:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
daemon     1864      1  0 20:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
root       1969   1808  0 20:37 pts/1    00:00:00 grep httpd

《2》 -w:等待进程死亡
《3》 -l:列出已知信息

[root@demo3 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

《4》 -15:正常终止进程 (默认)
《5》 -u:指定用户
注:

-0:只查看状态,不杀,常来检测进程是否存在,echo$?
killall:会杀死同名的进程
pkill :是kill和ps命令的集合,按照进程名来杀死进程

(5)htop——查看进程,监控软件
注:htop在安装前需要先安装epel rpm包。

安装epel源
[root@demo3 ~]# yum install https://dl.fedoraproject.org/pub/epel-release-latest-6.noarch.rpm
安装htop
[root@demo3 ~]# yum install htop
[root@demo3 ~]# htop

在这里插入图片描述
(6)vmstat——监控工具

[root@demo3 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 680448  21508 159224    0    0    12     3   11   12  0  0 99  0  0

字段含义:

选项含义
r等待执行的任务数
b等待io进程数
swpd正在使用虚拟的内存大小(值大于0表示内存不足)
free空闲内存大小
buff已用buff大小
cache已用cache大小
si每秒从交换区写入内存的大小
so每秒从内存写入交换区大小
bi每秒读取的块数
bo每秒写入的块数
in每秒中断shu
cs每秒上下文切换数
us用户进程消耗cpu时间
sy系统进程消耗cpu时间
id空闲时间
waio等待时间
st系统等待时间

(7)lsof——列出当前系统打开文件
《1》-u:显示uname或pid的进程情况

[root@demo3 ~]# lsof -u root
COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init         1 root  cwd       DIR                8,2     4096          2 /
init         1 root  rtd       DIR                8,2     4096          2 /
init         1 root  txt       REG                8,2   150352     524338 /sbin/i                                                                                       nit
init         1 root  mem       REG                8,2    65960       2622 /lib64/                                                                                       libnss_files-2.12.so

《2》-c:显示以字母开头的文件

[root@demo3 ~]# lsof -c t
COMMAND  PID USER   FD      TYPE DEVICE SIZE/OFF NODE NAME
ttm_swap 112 root  cwd       DIR    8,2     4096    2 /
ttm_swap 112 root  rtd       DIR    8,2     4096    2 /

《3》-p:列出pid的进程打开的文件

[root@demo3 ~]# lsof -p 1825
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
sftp-serv 1825 root  cwd    DIR    8,2     4096 524292 /root
sftp-serv 1825 root  rtd    DIR    8,2     4096      2 /
sftp-serv 1825 root  txt    REG    8,2    67640   7402 /usr/libexec/openssh/sftp-server
sftp-serv 1825 root  mem    REG    8,2    65960   2622 /lib64/libnss_files-2.12.so
sftp-serv 1825 root  mem    REG    8,2    43944   2634 /lib64/librt-2.12.so

《4》-d:根据文件描述,列出文件信息(FD)

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
init         1    root    2u   CHR    1,3      0t0   4601 /dev/null
udevd      510    root    2u   CHR    1,3      0t0   4601 /dev/null
auditd    1172    root    2u   CHR    1,3      0t0   4601 /dev/null
rsyslogd  1194    root    2w   REG    8,2     5917 394171 /var/log/secure
sshd      1284    root    2u   CHR    1,3      0t0   4601 /dev/null

《5》+d:显示目录下被进程开启的文件

[root@demo3 ~]# lsof +d /root
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash      1424 root  cwd    DIR    8,2     4096 524292 /root
bash      1445 root  cwd    DIR    8,2     4096 524292 /root
bash      1808 root  cwd    DIR    8,2     4096 524292 /root
sftp-serv 1825 root  cwd    DIR    8,2     4096 524292 /root
lsof      2054 root  cwd    DIR    8,2     4096 524292 /root
lsof      2055 root  cwd    DIR    8,2     4096 524292 /root

《6》+D:递归显示该目录下的所有文件及子目录下的文件

[root@demo3 ~]# lsof +D /root
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash      1424 root  cwd    DIR    8,2     4096 524292 /root
bash      1445 root  cwd    DIR    8,2     4096 524292 /root
bash      1808 root  cwd    DIR    8,2     4096 524292 /root
sftp-serv 1825 root  cwd    DIR    8,2     4096 524292 /root
lsof      2056 root  cwd    DIR    8,2     4096 524292 /root
lsof      2057 root  cwd    DIR    8,2     4096 524292 /root

《7》 -i:符合条件的进程信息(端口要加:)

[root@demo3 ~]# lsof -i :22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1284 root    3u  IPv4  12375      0t0  TCP *:ssh (LISTEN)
sshd    1284 root    4u  IPv6  12381      0t0  TCP *:ssh (LISTEN)
sshd    1439 root    3r  IPv4  13274      0t0  TCP 192.168.3.55:ssh->192.168.3.1:60996 (ESTABLISHED)
sshd    1802 root    3r  IPv4  16406      0t0  TCP 192.168.3.55:ssh->192.168.3.1:64923 (ESTABLISHED)
sshd    1806 root    3r  IPv4  16467      0t0  TCP 192.168.3.55:ssh->192.168.3.1:64926 (ESTABLISHED)

[root@demo3 ~]# lsof -i tcp
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1284   root    3u  IPv4  12375      0t0  TCP *:ssh (LISTEN)
sshd    1284   root    4u  IPv6  12381      0t0  TCP *:ssh (LISTEN)
master  1364   root   12u  IPv4  12571      0t0  TCP localhost:smtp (LISTEN)
master  1364   root   13u  IPv6  12574      0t0  TCP localhost:smtp (LISTEN)

《8》lsof+文件:查看谁在使用这个文件

[root@demo3 ~]# lsof /var/log/messages
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
rsyslogd 1197 root  1w   REG    8,2   195612 394170 /var/log/messages

(8)程序优先级(0—139)

0—99,有效的实时优先级(系统自己调用,人为不能调整),值越小,优先级越高。
100—139,非有效的实时优先级,静态优先级,值越小,优先级越高。
相对优先级nice(-20—19)值越小,优先级越高;默认是0

调整nice值:
《1》通过top调整
进入top中,输入r出现PID to renice一行,输入要修改的PID,enter
在这里插入图片描述
出现Renice PID 12 to value:,输入要修改的nice值,再enter即可

在这里插入图片描述
注:输入的nice值在[-20,19]的范围外,若小于-19,则nice值为-19,若大于20,则nice值为20.
在这里插入图片描述
《2》通过renice调整

[root@demo3 ~]# renice  0 12
12: old priority 19, new priority 0
[root@demo3 ~]# top
  12 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper

《3》通过htop调整

[root@demo3 ~]# htop
点击F7减nice值,F8增加nice值

(9)进程和作业

进程和作业的关系
一个作业可有多个进程组成;
shell可运行一个前台作业和多个后台作业

《1》将作业放在后台——&

[root@demo3 ~]# ping 192.168.3.55 >/dev/null 2>&1 &
[1] 2081

《2》查看作业——jobs

[root@demo3 ~]# jobs
[1]+  Running                 ping 192.168.3.55 > /dev/null 2>&1 &

注:jobs查看后台作业与终端,不同终端的作业在对应终端查看;
《3》后台作业放到前端——fg %job编号

[root@demo3 ~]# fg %3
ping 192.168.3.55 > /dev/null

注:可以不加%
《4》把后台作业运行起来——bg %job编号

[root@demo3 ~]# jobs
[2]+  Stopped                 sleep 2000
[root@demo3 ~]# bg %2
[2]+ sleep 2000 &
[root@demo3 ~]# jobs
[2]+  Running                 sleep 2000 &

注:可以不加%
《5》终止正在运行的作业——ctrl+z

[root@demo3 ~]# fg %2
sleep 2000———————输入ctrl+z
^Z
[2]+  Stopped                 sleep 2000

《6》杀死后台作业——kill %job编号

[root@demo3 ~]# jobs
[2]+  Running                 sleep 2000 &
[root@demo3 ~]# kill %2
[root@demo3 ~]# jobs
[2]+  Terminated              sleep 2000
[root@demo3 ~]# jobs

注:一定要加%

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值