进程和计划任务管理
进程查看和控制
查看进程
程序和进程的关系
程序
- 保存在硬盘、光盘等介质中可执行代码和数据
- 静态保存的代码
进程
- 在cpu及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
每个进程可以创建一个或者多个进程
查看静态进程命令
- ps -elf
- ps aux
查看动态进程的排名信息
- top
查看进程信息
- pgerp
例如查询root用户进程
pgrep -lu root
查询当前用户tty进程信息
pgrep -l -t tty
如果要查看张三用户运行的tty进程:
pgrep -l -U zhangsan -t tty
用树形结构查看进程
- pstree -aup
控制进程
- 手工启动
- 前台启动;用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”
- 调度启动
进程运行状态(前后台运行状态):
cp /dev/cdrom aa.iso & //将此命令过程调入后台执行
#jobs -l //查看后台程序及其编号
#fg 1 //将后台程序调入前台
cp /dev/cdrom aa.iso //此命令执行后可以按"Ctrl+z"将此操作调入后台并暂停
#bg 1 //将后台暂停的任务恢复启动
结束进程
- kill 进程号
- kill -9 进程号(强制结束进程)
#pgrep -l "sshd" //查询sshd的PID
#ps aux | grep "sshd" //更加详细的查看PID
#kill 2888 //将查询到的PID进行执行操作
#pgrep -l "sshd" //再次查看时,没有信息
选项 -9 //强制杀死进程,
如:使用vim打开一个文件,使用Ctrl+z挂起后无法使用kill杀死,则需-9选项
3.killall //使用进程名结束进程
killall -9 vim //结束vim的所有进程
根据条件来结束进程
- pkill 条件(用户、终端)
-U 指定用户
- t 指定终端
pgrep -lu "zhangsan" //查看张三所开启的进程
pkill -9 -U "zhangsan" //强制结束用户张三所有进程
pkill -9 -t tty1
计划任务管理
at一次性任务设置
一次性计划任务(和Windows任务计划程序一样)
#date //查看时间
#date -s 20170320 //修改系统日期(防止和具体时间不一致)
#date -s 08:20 //修改系统时间
yum install -y at
systemctl start atd //启动该程序
systemctl enable atd
at 08:20 2017-03-20 (你希望在什么时候执行)
at> mkdir 123 //输入完成后Ctrl+d提交(希望执行的操作)
at> <EOT>
atq //任务还未执行时查看状态。
atq
2 Thu Dec 12 12:12:00 2019 a root
3 Thu Dec 5 12:13:00 2019 a root
at -c 3 //查询第三个任务详细任务信息
#atrm 3 //查看编号后可以删除此任务
crontab 周期性任务设置
按照预先设置的时间周期(分钟、小时、天。。)重复执行用户指定的命令操作
属于周期性计划任务
主要设置文件
全局配置文件,位于: /etc/crontab
系统默认的位置,位于:/ect/cron.*/
用户定义的设置,位于:/var/spool/cron/用户名
管理cron计划任务
编辑计划任务(可以查看编辑,也可以删除)
crontab -e [-u 用户]
查看计划任务
crontab -l [-u 用户]
删除计划任务
crontab -r [-u 用户]
crontab任务配置格式
时间数值的特殊表示方法
*表该范围内任意时间
,表示间隔的多个不连续时间点
-表示一个连续的时间范围
/指定间隔的时间频率
示例:
- 0 17 * * 1-5 周一到周五每天17:00
- 30 8 * * 1,3,5 每周一、三、五的8:30分
- 0 8-18/2 * * * 8点到18点之间每2小时
- 0 * */3 * * 每3天
示例1
每周五、每周六的下午3点整备份
需求:将/root/abc目录每天5点10分备份至/home下:
systemctl start crond
systemctl enable crond
vim /root/a.sh
#!/bin/bash
tar zcf /home/http_back_`date +%F_%T`.tar.gz /root/abc &> /dev/null
保存退出
crontab -e
10 17 * * 1-7 /bin/bash /root/a.sh
保存退出
示例2
每天早上7:50自动开启sshd服务,22点50时关闭
每隔5天清空一次FTP服务器公共目录/var/ftp/pub
每周六的7:30时,重新启动httpd服务
每周一、三、五的17:30时,打包备份/etc/httpd目录
每月1日与周一到周五的23点重启web服务
[root@localhost root]# crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 0 */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
0 23 1 * 1-5 /sbin/service httpd restart
date 用法
date 显示或者设定系统日期时间
date -d 时间 显示输入的时间
date -s 日期时间 设置日期时间
时间格式(时分秒)支持的符号标记有:
符号 | 符号说明 |
---|---|
% | 印出 % |
%n | 下一行 |
%t | 跳格 |
%H | 小时(00…23) |
%I | 小时(01…12) |
%k | 小时(0…23) |
%l | 小时(1…12) |
%M | 分钟(00…59) |
%p | 显示本地 AM 或 PM |
%r | 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M) |
%R | 24小时制方式显示时间,相当于%H:%M |
%s | 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 |
%S | 秒(00…60) |
%T | 直接显示时间 (24 小时制) |
%X | 相当于 %H:%M:%S |
%z | 数字方式显示时区 |
%Z | 字母缩写方式显示时区 |
支持的日期格式符号标记
%a | 星期几 ,缩写(Sun…Sat) |
---|---|
%A | 星期几 ,完整英文星期(Sunday…Saturday) |
%b | 月份 (Jan…Dec) |
%B | 月份 (January…December) |
%c | 直接显示日期与时间 |
%d | 日 (01…31) |
%D | 直接显示日期 (mm/dd/yy) |
%e | 一个月中的第几天,类似%d |
%F | 完整的日期,相当于%Y-%m-%d |
%h | 同 %b |
%j | 一年中的第几天 (001…366) |
%m | 月份 (01…12) |
%u | 一周中的第几天 (1…7) (1是星期一) |
%U | 一年中的第几周 (00…53) (以 Sunday 为一周的第一天的情形) |
%w | 一周中的第几天 (0…6)(0是星期天) |
%W | 一年中的第几周 (00…53) (以 Monday 为一周的第一天的情形) |
%x | 直接显示日期 (mm/dd/yy) |
%y | 年份的最后两位数字 (00.99) |
%Y | 完整年份 (0000…9999) |
显示完整的当前年月日,具体时间
[root@123 ~]# date +%Y年%m月%d日-%T
2022年12月05日-11:21:41
显示前一天日期 和后一天日期
*# 显示前一天的日期*
date -d "1 days ago"
*# 显示后一天的日期*
date -d "-1 days ago"
设置系统时间
# 语法
date -s 字符串时间
*# 示例*
date -s "2017-09-15 20:15:35"
例如
每周五下午三点备份
需求:将/root/abc目录每天5点10分备份至/home下:
systemctl start crond
systemctl enable crond
vim /root/a.sh
#!/bin/bash
tar zcf /home/http_back_`date +%F_%T`.tar.gz /root/abc &> /dev/null
保存退出
crontab -e
10 15 * * 1-7 /bin/bash /root/a.sh
保存退出
思考;
打包时每周更新,打包的文件名一样原来的被覆盖,看不到之前文件,如何设置
打包时设置当前时间命名
例如
tar zcf abcdate +%F-%T
.tar.gz