zoukankan      html  css  js  c++  java
  • linux日常运维(一)

    - 进程管理ps、top

    - 任务计划crontab

    进程管理

    概念:进程是在自身的虚拟地址空间运行的一个单独的程序。

    进程和程序区别:程序只是一个静态的命令集合,不占系统的运行资源;而进程是一个随时都有可能发生变化的、动态的、使用系统运行资源的程序。一个程序可以启动多个进程。和进程相比较。作业是一系列按一定顺序执行的命令。一条简单的命令可能会涉及多个进程,尤其是当使用管道和重定向时。进程有以下特征:

    • 动态性:进程的实质是程序是在多道程序系统中的一次执行过程,进程是动态初始、动态消亡的。
    • 并发性:任何进程都可以同其他进程一起并发执行。
    • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位。
    • 异步性:由于进程间的相互制约,是的进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。
    • 结构特征:进程由程序、数据和进程控制块三部分组成。
    • 多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生变化。

    在linux系统中由三种进程:

    • 交互式进程:一个由shell启动并控制的进程,交互式进程既可在前台运行,也可在后台运行。
    • 批处理进程:与终端无关,安排在指定时刻完成的一系列进程。
    • 守护进程:在引导系统时启动,以执行即时的操作系统任务,比如crond、rsyslogd、named等。
    查看系统进程的信息
    1. ps命令 命令语法:ps [选项]
    选项含义
    -A 显示所有的进程
    -N 选择除了那些符号指定条件的所有进程
    -a 显示排除会话领导者和进程不与终端向关联的所有进程
    -d 显示所有的进程(排除会话领导者)
    -e 显示所有的进程
    T 显示当前终端下的所有进程
    a 所有的W /tty,包括其他用户
    r 显示仅运行中的进程
    x 处理w/o控制的ttys
    -c 为-l选项显示不同的调度信息
    c 列出进程时,显示每个进程真正的命令名称,而不包括路径、参数或常驻服务的标识
    -C<命令名> 按命令名显示进程
    -G<真实的用户GID或者组群名> 按真实的组群GID或者组群名显示进程
    -U<真实的用户UID或者用户名> 按真实的用户UID或者用户名显示进程
    -g<组名> 选择会话或有效的组名显示进程
    -p<进程ID> 按进程id显示进程
    -s<会话ID> 显示指定会话ID的进程。
    -t<终端> 按终端显示进程
    -u<有效的用户UID或用户名> 按有效的用户UID显示进程
    U<用户名> 显示属于该用户的进程
    t<终端> 按终端显示进程
    -f 显示UID、PPID、C和STIME字段
    -j或j 采用作业控制的格式显示进程
    s 采用进程信号的格式显示进程
    v 以虚拟内存格式显示进程
    -l或l 采用详细的格式来显示过程
    u 以面向用户的格式显示进程
    p<进程ID> 显示指定进程号的进程,效果和-p选项相同,只在列表格式方面不同
    L 列出输出字段的相关信息
    f 用ASCII字符显示树状结果,表达进程间的相互关系。
    r 只显示终止运行的进程
    e 列出进程时,显示每个进程所使用的环境变量
    -w或w 按宽格式显示输出
    -u 打印用户格式,显示用户名和进程的起始时间
    -x 显示不带控制终端的进程
    -t<终端编号> 显示指定终端编号的进程
    n 以数字来表示USER和WCHAN字段
    h 不显示标题列
    -H 显示树状结构,表示进程间的相互关系
    -m或m 在进程后面显示线程
    -y 配合-l选项使用时,不显示F(flag)输出字段,并以RSS字段取代ADDR字段

    例子:查看crond进程是否正在运行

    [root@localhost ~]# ps -ef|grep crond
    root       6571      1  0 03:04 ?        00:00:00 /usr/sbin/crond -n
    root       7457   7383  0 03:28 pts/0    00:00:00 grep --color=auto crond
    

    显示所有不带控制台终端的进程,并显示用户名和进程的起始时间。

    [root@localhost ~]# ps -aux
    

    显示tty1终端下的进程

    [root@localhost ~]# ps -t tty1
       PID TTY          TIME CMD
      6572 tty1     00:00:00 agetty
    
    1. top命令:显示当前正在运行的进程以及关于它们的重要信息,包括它们的内存和CPU使用量。使用q键可以退出top命令

    命令语法:top [选项]

    选项含义
    -b 使用批处理模式
    -c 列进程时,显示每个进程的完整命令,包括命令名称、路径和参数等
    -d<间隔秒数> 监控进程执行状态的间隔时间,单位以秒计算。
    -i 忽略闲置或是已成为Zombie进程
    -n<执行次数> 设置监控信息的更新次数
    -S 使用累计时间模式
    -u<用户名或有效用户UID> 仅监控指定有效用户UID或用户名匹配的进程
    -p<进程PID> 仅监视指定进程的ID的进程
    -U<用户名或用户UID> 仅监视指定用户UID或用户名匹配的进程

    例子:只显示root用户的进程

    [root@localhost ~]# top -u root
    
    kill命令杀死进程

    命令语法:kill [选项] [进程号]

    选项含义
    -s<信号> 指定发送的信号
    -l 显示信号名称的列表,一共62个

    例如:强制杀死进程号为6571的进程

    [root@localhost ~]# ps -ef|grep crond
    root       6571      1  0 03:04 ?        00:00:00 /usr/sbin/crond -n
    root       7534   7383  0 03:48 pts/0    00:00:00 grep --color=auto crond
    [root@localhost ~]# kill -9 6571
    [root@localhost ~]# ps -ef|grep crond
    root       7536   7383  0 03:49 pts/0    00:00:00 grep --color=auto crond
    
    任务计划:在固定的时间上触发某个作业,就需要创建任务计划,按时执行该作业。使用cron实现任务计划可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的。
    1. 安装crontabs和cronie软件包
    [root@localhost ~]# yum -y install vixie-cron
    
    1. 控制crond服务 使用以下命令启动crond服务
    [root@localhost ~]# systemctl start crond.service
    

    使用以下命令在重新引导系统时自动启动crond服务

    [root@localhost ~]# systemctl enable crond.service
    [root@localhost ~]# systemctl is-enabled crond.service
    enabled
    
    1. /etc/crontab文件是cron的默认配置文件,内容如下
    [root@localhost ~]# cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    
    

    其中#号开始的行是注释内容,不会被处理。

    前面3行是用来配置cron任务运行环境的变量。/etc/crontab文件中的每一行都表示一项任务,它的格式如下

    minute     hour      day      month     day of week   user-name   command
    
    内容描述
    minute 分钟,0~59的任意整数
    hour 小时,0~23的任意整数
    day 日期,1~31的任意整数(如果指定了月份,则必须是该月份的有效日期)
    month 月份,1~12的任意整数(或使用月份的英文简写入Jan、Feb等)
    day of week 星期,0~7的任意整数,这里的0或7代表星期日(或使用星期的英文简写入Sun、Mon等)
    user-name 执行命令的用户
    Command 要执行的命令或者是自己编写的脚本

    /etc、crontab文件中可以下表的时间格式

    时间格式描述
    * 可以用来代表所有有效的值。如月份值中的型号意味着在满足其他制约条件后每月都执行该命令
    - 指定一个整数范围。比如1-4意味着整数1、2、3、4
    , 指定隔开的一系列值指定一个列表。比如3,4,6,8表明这四个指定的整数。
    / 可以用来指定间隔频率。在范围后加上/<integer>意味着在范围内可以跳过integer。如"0-59/2"可以用来在分钟字段上定义时间间隔为两分钟。间隔频率值还可以和星号一起使用,如"*/3"的值可以用在月份字段中表示每3个月运行一次任务。
    1. /etc/crontab文件配置举例 在每天晚上的21:30执行/root、backup.sh
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    30 21 * * * root /root/backup.sh
    

    在每星期六、星期日的1:20执行一个find命令,查找相应的文件

    20 1  * * 6,0 root /bin/find / -name core -exec rm {} ;
    
    1. /etc/cron/d目录:在/etc/cron.d目录中创建文件(该目录下所有文和/etc/crontab文件使用一样的配置语法)来实现。例如:
    [root@localhost ~]# ls /etc/cron.d
    0hourly
    [root@localhost ~]# cat /etc/cron.d/0hourly
    # Run the hourly jobs
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    01 * * * * root run-parts /etc/cron.hourly
    
    使用crontab命令实现任务计划
    1. cronta命令简介 root以外的用户可以使用crontab命令配置cron任务。所有用户定义的crontab都被保存在/varspool/cron目录中,并使用创建它们的用户身份来执行。
    • 以某位用户身份一个crontab项目
    • 以该用户身份登录
    • 然后输入crontab -e命令,就进入编辑器编辑该用户的crontab了。(该编辑器是由VISUAL或EDITOR环境变量指定的,文件格式和/etc/crontab相同)
    • 编辑成功保存后,该文件会根据用户名被保存在/var/spool/cron/<username>文件中。
    • crond守护进程每分钟都检查/etc/crontab文件、/etc/cron.d目录以及/var/spool/cron目录中的改变。如果发现改变,它们就会被载入内存。
    1. 命令语法:crontab [选项] crontab [选项] [文件]
    选项含义
    -u<用户名> 用户名,如果使用自己的用户名登录,就不需要使用该选项
    -e 编辑用户的crontab
    -l 列出用户的crontab中的内容
    -r 删除用户的crontab
    -i 删除用户的crontab前进行提示
    1. 创建crontab 例子:以用户zhangsan登录系统,创建crontab
    [root@localhost ~]# su - wangwu
    [wangwu@localhost ~]$ date
    Sat Jul 27 05:41:34 EDT 2019
    

    使用crontab -e命令打开vi编辑器,编辑成功后查看,切换为root用户查看(普通用户没有权限打开该文件)

    [wangwu@localhost ~]$ su - root
    Password: 
    Last login: Sat Jul 27 05:38:10 EDT 2019 from 192.168.64.1 on pts/0
    [root@localhost ~]# cat /var/spool/cron/wangwu
    
    1. 编辑crontab过程中可以在每个条目指示加一条注释,这样就可以知道它的功能、运行时间,更为重要的是指定这是哪位用户的作业。
    2. 列出crontab: 以root用户列出wangwu的crontab
    [root@localhost ~]# crontab -u wangwu -l
    
    1. 删除crontab:删除crontab同时会删除/var/spool/cron目录中指定有用户的文件

    例如:以普通用户wangwu删除自己的crontab

    [wangwu@localhost ~]$ crontab -r
    
    1. 恢复丢失的crontab文件(找到系统自动备份的位置/var/spool/cron/wangwu)

    命令语法:crontab [文件] 例如:以wangwu登录恢复丢失的crontab文件

    [wangwu@localhost ~]$ crontab /home/wangwu/wangwucron
    

    摘自:《Linux实用教程》人民邮电出版社出版发行 於岳编著

    例如:以普通用户wangwu删除自己的crontab

    [wangwu@localhost ~]$ crontab -r
    
    1. 恢复丢失的crontab文件(找到系统自动备份的位置/var/spool/cron/wangwu)

    命令语法:crontab [文件] 例如:以wangwu登录恢复丢失的crontab文件

    [wangwu@localhost ~]$ crontab /home/wangwu/wangwucron
    

    摘自:《Linux实用教程》人民邮电出版社出版发行 於岳编著

  • 相关阅读:
    转:专题五线程同步——事件构造
    转:专题四线程同步
    转:专题三线程池中的I/O线程
    转:[C# 开发技巧]如何防止程序多次运行
    转:专题二线程池中的工作者线程
    转:专题一线程基础
    C# 设置按钮快捷键
    jmeter链接多台负载机报错
    java读取properties
    使用Runtime.getRuntime().exec()方法的几个陷阱
  • 原文地址:https://www.cnblogs.com/mylive/p/11280236.html
Copyright © 2011-2022 走看看