Linux进程和计划任务实践

1、显示统计占用系统内存最多的进程,并排序。

  方法一

[root@test ~]#ps aux --sort=%mem
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         2  0.0  0.0      0     0 ?        S    Sep20   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Sep20   0:18 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Sep20   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Sep20   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        R    Sep20   7:21 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   Sep20   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S    Sep20   0:18 [watchdog/0]
root        13  0.0  0.0      0     0 ?        S    Sep20   0:00 [kdevtmpfs]
root        14  0.0  0.0      0     0 ?        S<   Sep20   0:00 [netns]
root        15  0.0  0.0      0     0 ?        S    Sep20   0:01 [khungtaskd]
root        16  0.0  0.0      0     0 ?        S<   Sep20   0:00 [writeback]
root        17  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kintegrityd]
root        18  0.0  0.0      0     0 ?        S<   Sep20   0:00 [bioset]
root        19  0.0  0.0      0     0 ?        S<   Sep20   0:00 [bioset]
root        20  0.0  0.0      0     0 ?        S<   Sep20   0:00 [bioset]
root        21  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kblockd]
root        22  0.0  0.0      0     0 ?        S<   Sep20   0:00 [md]
root        23  0.0  0.0      0     0 ?        S<   Sep20   0:00 [edac-poller]
root        24  0.0  0.0      0     0 ?        S<   Sep20   0:00 [watchdogd]
root        30  0.0  0.0      0     0 ?        S    Sep20   0:01 [kswapd0]
root        31  0.0  0.0      0     0 ?        SN   Sep20   0:00 [ksmd]
root        32  0.0  0.0      0     0 ?        SN   Sep20   0:08 [khugepaged]
root        33  0.0  0.0      0     0 ?        S<   Sep20   0:00 [crypto]
root        41  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kthrotld]
root        43  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kmpath_rdacd]
root        44  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kaluad]
root        45  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kpsmoused]
root        46  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ipv6_addrconf]
root        59  0.0  0.0      0     0 ?        S<   Sep20   0:00 [deferwq]
root        90  0.0  0.0      0     0 ?        S    Sep20   0:00 [kauditd]
root       244  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ata_sff]
root       260  0.0  0.0      0     0 ?        S    Sep20   0:00 [scsi_eh_0]
root       261  0.0  0.0      0     0 ?        S<   Sep20   0:00 [scsi_tmf_0]
root       262  0.0  0.0      0     0 ?        S    Sep20   0:00 [scsi_eh_1]
root       263  0.0  0.0      0     0 ?        S<   Sep20   0:00 [scsi_tmf_1]
root       266  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ttm_swap]
root       274  0.0  0.0      0     0 ?        S<   Sep20   0:16 [kworker/0:1H]
root       283  0.0  0.0      0     0 ?        S    Sep20   0:30 [jbd2/vda1-8]
root       284  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ext4-rsv-conver]
root       485  0.0  0.0      0     0 ?        S<   Sep20   0:00 [nfit]
root      2858  0.0  0.0      0     0 ?        S    Nov01   0:02 [kworker/u2:1]
root      6330  0.0  0.0      0     0 ?        S    Oct31   0:12 [kworker/u2:2]
root     10504  0.0  0.0      0     0 ?        R    14:28   0:00 [kworker/0:1]
root     29972  0.0  0.0      0     0 ?        S    Nov20   0:00 [kworker/0:2]
root       531  0.0  0.0 110104   860 tty1     Ss+  Sep20   0:00 /sbin/agetty --noclear tty1 linux
root       530  0.0  0.0 110104   876 ttyS0    Ss+  Sep20   0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
root       525  0.0  0.0  25904   956 ?        Ss   Sep20   0:00 /usr/sbin/atd -f
root       490  0.0  0.0  55520  1104 ?        S/dev/null
root         1  0.0  0.1 125460  3584 ?        Ss   Sep20  11:12 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
nginx      906  0.0  0.2 125888  4052 ?        S    Nov02   0:03 nginx: worker process
root     12512  0.0  0.2  32528  4228 ?        S 
 

  说明:--sort就是指定以某一字段排序

   方法二

[root@test ~]#ps aux |awk '{if(NR != 1){print $4,$0}}'|sort -n
0.0 chrony     537  0.0  0.0 117784  1876 ?        S    Sep20   0:15 /usr/sbin/chronyd
0.0 root        10  0.0  0.0      0     0 ?        S<   Sep20   0:00 [lru-add-drain]
0.0 root     10504  0.0  0.0      0     0 ?        S    14:28   0:00 [kworker/0:1]
0.0 root      1081  0.0  0.0 113544   976 pts/0    S+   22:13   0:00 awk {if(NR != 1){print $4,$0}}
0.0 root      1082  0.0  0.0 116500   920 pts/0    S+   22:13   0:00 sort -n
0.0 root        11  0.0  0.0      0     0 ?        S    Sep20   0:18 [watchdog/0]
0.0 root     12341  0.0  0.0 127900  1496 ?        Ss   Nov05   0:00 SCREEN -A jupyterhub
0.0 root     12552  0.0  0.0 127768  1412 ?        Ss   Nov05   0:00 SCREEN -S jupyerhub
0.0 root        13  0.0  0.0      0     0 ?        S    Sep20   0:00 [kdevtmpfs]
0.0 root        14  0.0  0.0      0     0 ?        S<   Sep20   0:00 [netns]
0.0 root     14251  0.0  0.0  99980  1604 ?        Sl   Oct31   0:01 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8888 -container-ip 172.17.0.2 -container-port 80
0.0 root     14261  0.0  0.0  99980  1604 ?        Sl   Oct31   0:01 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 2031 -container-ip 172.17.0.2 -container-port 2031
0.0 root     14271  0.0  0.0  99980  1600 ?        Sl   Oct31   0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 2021 -container-ip 172.17.0.2 -container-port 2021
0.0 root     14290  0.0  0.0  18364  1644 pts/2    Ss+  Oct31   0:00 /bin/bash /etc/gaga.sh
0.0 root        15  0.0  0.0      0     0 ?        S    Sep20   0:01 [khungtaskd]
0.0 root        16  0.0  0.0      0     0 ?        S<   Sep20   0:00 [writeback]
0.0 root        17  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kintegrityd]
0.0 root        18  0.0  0.0      0     0 ?        S<   Sep20   0:00 [bioset]
0.0 root        19  0.0  0.0      0     0 ?        S<   Sep20   0:00 [bioset]
0.0 root        20  0.0  0.0      0     0 ?        S<   Sep20   0:00 [bioset]
0.0 root         2  0.0  0.0      0     0 ?        S    Sep20   0:00 [kthreadd]
0.0 root        21  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kblockd]
0.0 root        22  0.0  0.0      0     0 ?        S<   Sep20   0:00 [md]
0.0 root        23  0.0  0.0      0     0 ?        S<   Sep20   0:00 [edac-poller]
0.0 root        24  0.0  0.0      0     0 ?        S<   Sep20   0:00 [watchdogd]
0.0 root       244  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ata_sff]
0.0 root       260  0.0  0.0      0     0 ?        S    Sep20   0:00 [scsi_eh_0]
0.0 root       261  0.0  0.0      0     0 ?        S<   Sep20   0:00 [scsi_tmf_0]
0.0 root       262  0.0  0.0      0     0 ?        S    Sep20   0:00 [scsi_eh_1]
0.0 root       263  0.0  0.0      0     0 ?        S<   Sep20   0:00 [scsi_tmf_1]
0.0 root       266  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ttm_swap]
0.0 root       274  0.0  0.0      0     0 ?        S<   Sep20   0:16 [kworker/0:1H]
0.0 root       283  0.0  0.0      0     0 ?        S    Sep20   0:30 [jbd2/vda1-8]
0.0 root       284  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ext4-rsv-conver]
0.0 root      2858  0.0  0.0      0     0 ?        S    Nov01   0:02 [kworker/u2:1]
0.0 root     29972  0.0  0.0      0     0 ?        S    Nov20   0:00 [kworker/0:2]
0.0 root        30  0.0  0.0      0     0 ?        S    Sep20   0:01 [kswapd0]
0.0 root         3  0.0  0.0      0     0 ?        S    Sep20   0:18 [ksoftirqd/0]
0.0 root        31  0.0  0.0      0     0 ?        SN   Sep20   0:00 [ksmd]
0.0 root        32  0.0  0.0      0     0 ?        SN   Sep20   0:08 [khugepaged]
0.0 root        33  0.0  0.0      0     0 ?        S<   Sep20   0:00 [crypto]
0.0 root        41  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kthrotld]
0.0 root        43  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kmpath_rdacd]
0.0 root        44  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kaluad]
0.0 root        45  0.0  0.0      0     0 ?        S<   Sep20   0:00 [kpsmoused]
0.0 root        46  0.0  0.0      0     0 ?        S<   Sep20   0:00 [ipv6_addrconf]
0.0 root       485  0.0  0.0      0     0 ?        S<   Sep20   0:00 [nfit]
0.0 root       490  0.0  0.0  55520  1104 ?        S/dev/null
0.1 root       374  0.0  0.1  45012  2196 ?        Ss   Sep20   0:00 /usr/lib/systemd/systemd-udevd
0.1 root       548  0.0  0.1 116628  3252 pts/0    Ss   22:04   0:00 -bash
0.1 root       752  0.0  0.1 107464  2156 ?        Ss   Sep20   0:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H qiuping eth0
0.1 root       820  0.0  0.1  41072  3220 ?        Ssl  Sep20  37:17 /usr/sbin/aliyun-service
0.1 root       905  0.0  0.1 125116  2272 ?        Ss   Nov02   0:00 nginx: master process /usr/sbin/nginx
0.2 nginx      906  0.0  0.2 125888  4052 ?        S    Nov02   0:03 nginx: worker process
0.2 root      1125  0.0  0.2 112864  4340 ?        Ss   Sep20   0:00 /usr/sbin/sshd -D
0.2 root     12512  0.0  0.2  32528  4228 ?        S 
  

  说明:以上方法利用awk把第四行字段取出来,然后在显示整行,然后对组合的条目排序。

2、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"

   1)for循环实现

[root@test ~]#cat ping.sh 
#!/bin/bash
decare -i ipbegan=1
decare -i ipend=254
network="192.168.0."

for ip in `seq $ipbegan $ipend`;do
        {
        ping -c 1 -w 1 ${network}$ip &>/dev/null
        if [ $? -eq 0 ];then
                echo -e "\033[032m${network}$ip is success! \033[0m"
        else
                echo -e "\033[031m${network}$ip is fail! \033[0m"
        fi
}&
done
wait
[root@test ~]#

  2)c语言风格for循环实现

[root@test ~]#cat ping.sh 
#!/bin/bash
declare -i ipbegan=1
declare -i ipend=254
network="192.168.0."

for((i=$ipbegan;i<=$ipend;i++));do
        {
        ping -c 1 -w 1 ${network}$i &>/dev/null
        if [ $? -eq 0 ];then
                echo -e "\033[032m${network}$i is success! \033[0m"
        else
                echo -e "\033[031m${network}$i is fail! \033[0m"
        fi 
}&
done
wait

  3)while循环实现

[root@test ~]#cat ping.sh 
#!/bin/bash
declare -i ipbegan=1
declare -i ipend=254
network="192.168.0."

while [ $ipbegan -le $ipend ];do
        {
        ping -c 1 -w 1 ${network}${ipbegan} &>/dev/null
        if [ $? -eq 0 ];then
               echo -e "\033[032m${network}${ipbegan} is success! \033[0m"
        else
                echo -e "\033[031m${network}${ipbegan} is fail! \033[0m"
        fi
        }&
        let ipbegan+=1
done
wait

  说明:while循环使用多线程的方式,需要把let ipbegan+=1放在"}&"之后,不能连let ipbegan+=1也括在里面。

3、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

  1)编写备份脚本

[root@test ~]#cat backup.sh 
#!/bin/bash
backup_file="/etc"
backup_dest="/backup"
[ ! -e $backup_dest ] && mkdir $backup_dest|| ture
[ $? -eq 0 ] && tar zcf ${backup_dest}/etcbak-`date -d 'yesterday' '+%F-%H-%M-%S'`.tar.xz $backup_file &>/dev/null
[root@test ~]#

   2)制定计划任务

[root@test ~]#crontab -l
30 01 * * 1-5 root /bin/bash /root/backup.sh &> /dev/null
[root@test ~]#

4、工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高 于80%,就发送邮件报警

  1)编写检查磁盘空间脚本

#!/bin/bash

for i in `df|awk '/^\/dev\//{print $5}'|cut -d '%' -f1`;do
        if [ $i -gt 80 ];then
#       /bin/wall "disk is full"
        echo "disk is full" | mail -s "warning" [email protected] &> /dev/null
        fi
done
[root@test ~]#

  说明:以上脚本发送邮件需要先配置邮件

  2)制定计划任务

[root@test ~]#crontab -l
*/10 * * * 1-5 root /bin/bash /root/checkdisk.sh &> /dev/null
[root@test ~]#

  

你可能感兴趣的:(Linux进程和计划任务实践)