进程和计划任务

进程概念:

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

Process: 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程 UID、GID、和SELinux语境决定对文件系统的存取和访问权限, 通常从执行进程的用户来继承 存在生命周期

• task struct:Linux内核存储进程信息的数据结构格式 

• task list:多个任务的的task struct组成的链表

• 进程创建: init:第一个进程 父子关系 进程:都由其父进程创建,CoW fork(), clone()

进程:在CPU及内存中运行的程序代码; 是动态执行的代码; 

 父、子进程:每个进程可以创建一个或多个进程

查看进程时间

1)、ps命令

    用途:查看静态的进程统计信息

    格式:ps aux   ==>显示系统所有进程

                ps -elf    ==>以长格式显示

2)、top命令

        用途:查看动态的进程排名信息

       格式:top

3)、pgrep命令  

    用途:根据特定条件查询进程PID信息    


4)、pstree命令

     用途:以树型结构显示各进程间的关系

   格式:pstree [-aup]


3、进程的不同启动方式

   1)手工启动

  前台启动:用户输入命令直接执行程序

 blob.png

     后台启动:在命令行尾加入“&”符号(即把这个命令放在后台执行,执行后,会显示一个后台任务顺序号和一个PID号)

  计划任务

at任务使用at命令,设置在某个特定的时间,执行一次任务,可以说是临时的,因为执行一次便从计划中删除。

at命令

设置格式:at  [HH:MM]  [yyyy-mm-dd]

at [option] TIME 

• 常用选项: 

 -V 显示版本信息:

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

 -d: 删除指定的作业;相当于atrm -c: 查看具体作业任务 

 -f /path/from/somefile:从指定的文件中读取任务

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

(at的数据存放在/var/spool/at/下 如需要修改at ,只能直接修改文件)

/etc/at.deny 写入该文件的用户不能配置at
/etc/at.allow 默认不存在,不存在时,deny文件有效,当allow存在,deny失效,只有写入allow的用户才能配置at。

周期性计划任务 cron

照预先设置的时间周期(分,时,日,月,周几)重复执行用户指定的命令操作,属于周期性计划任务

相关的程序包: cronie: 主程序包,提供crond守护进程及相关辅助工具; cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在 过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务 crontabs:包含CentOS提供系统维护任务

确保crond守护处于运行状态: CentOS 7: systemctl status crond ;CentOS 6: service crond status

计划周期性执行的任务提交给crond,到指定时间会自动运行 

系统cron任务:系统维护作业 /etc/crontab 

用户cron任务: crontab命令 

• 日志:/var/log/cron

• 系统cron任务:/etc/crontab 

• 注释行以 # 开头 

• 详情参见 man 5 crontab 

# 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 

• 例如:晚上9点10分运行echo命令 10 21 * * * centos /bin/echo "Howdy!"

每3小时echo和wall命令 0 */3 * * * centos /bin/echo “howdy”;/usr/bin/wall “welcome to China”

• 用户cron:( 用户级计划任务)

• crontab命令定义,每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME 

• crontab命令: crontab [-u user] [-l | -r | -e] [-i] -l: 列出所有任务;

      -e: 编辑任务; 

      -r: 移除所有任务; 

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

      -u user: 仅root可运行,指定用户管理cron任务

• 控制用户执行计划任务: /etc/cron.{allow,deny}

root用户可以管理指定用户的计划任务;普通用户只能管理自己的计划任务)

(备注:用户只需执行“crontab -e”命令后会自动调用文本编辑器(默认为vi)并打开“/var/spool/cron/用户名”文件,无需手动指定文件位置)

crontab应用简单举例

示例1:root用户需求:  每天早上7:50自动开启sshd服务,22点50时关闭 

                       每隔5天清空一次FTP服务器公共目录/var/ftp/pub

                      每周六的7:30时,重新启动httpd服务

                 每周一、三、五的17:30时,打包备份/etc/httpd目录

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



1、每天的2点和12点整,将/etc备份至/testdir/backup目录中,保存的文件名称格式为“etcbak-yyyy-mm-dd-HH.tar.xz”


* 2,12 * * * root  /bin/mkdir -p /testdir/backup; /bin/tar Jcvf /testdir/backup/etcbak-$(/bin/date +\%F-\%H).tar.xz /etc

(注意:1,在/etc/crontab下编辑,一定要注意带绝对路径;2,gzip对应z ,bzip2对应j ,xz对应J;3,%在这里要加上转义符号\)



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


* * * * 2,4,7 root /bin/cp -av /var/log/messages /logs/messages-$(/bin/date +\%Y\%m\%d)


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


0 */2 * * * root  /bin/cat /proc/meminfo | /bin/grep -e ^S -e ^M >> /tmp/meminfo.txt




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

朝9晚5 周一到周五

编辑一个脚本

#!/bin/bash

if [ $(df |tr -s ' '|cut -d' ' -f5|sort -rn|head -1) -gt 80 ];then

    wall "有分区大于80%"

fi

crontab -e 写入*/10 9-17 * * 1-5 /root/zhouyi.sh











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章