目录
一、手动启动进程
1、理解前台启动与后台启动
2、如何完成前台启动后台启动的切换
3、完成并行执行多个任务
4、结束进程
1、kill
2、killall
2、pkill
二、计划任务
1、at一次性计划任务
2、实操
2、周期性计划任务
1、关于设置周期性任务的配置文件以及格式
2、设置周期性任务的方法以及命令
实操案例:14点每分钟创建一个在同名时间文件名
一、手动启动进程
1、理解前台启动与后台启动
前台启动:通过终端启动,且启动后一直占据终端,终端不可以干别的事
后台启动:可通过终端启动,但启动后即转入后台运行(释放终端),终端可以干别的事
两者可以切换
2、如何完成前台启动后台启动的切换
采用“命令&”可以将进程放到后台执行
##命令dd &将其放到后台执行,并给到一个进程pid号
[root@localhost opt]#dd if=/dev/zero of=/opt/bigfile &
[1] 13991
##查看当前后台的任务状态:jobs
[root@localhost opt]#jobs
[1]+ 运行中 dd if=/dev/zero of=/opt/bigfile &
##查看当前后台的任务状态以及pid号:jobs -l
[root@localhost opt]#jobs -l
[1]+ 13991 运行中 dd if=/dev/zero of=/opt/bigfile &
##将后台的任务放到前台运行:fg +任务的序号
[root@localhost opt]#fg 1
dd if=/dev/zero of=/opt/bigfile
^Z
[1]+ 已停止 dd if=/dev/zero of=/opt/bigfile
###ctrl + z将前台的任务停止并挂起,处于停止,但是还在
##看下任务的状态区别
[root@localhost opt]#jobs
[1]+ 已停止 dd if=/dev/zero of=/opt/bigfile
##再次启动挂起的任务 :bg +任务序号
[root@localhost opt]#bg 1
[1]+ dd if=/dev/zero of=/opt/bigfile &
##再看一下状态
[root@localhost opt]#jobs
[1]+ 运行中 dd if=/dev/zero of=/opt/bigfile &
3、完成并行执行多个任务
比如想要同时与三台主机ping
ping 127.0.0.1 & ping www.baidu.com & ping 192.168.20.10 &
4、结束进程
1、kill
号代号 | 信号名称 | 说 明 |
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 该信号让进程立即关闭.然后重新读取配置文件之后重启 |
2 | INT | 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键 |
3 | QUIT | 退出 |
8 | FPE | 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误 |
9 | KILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。般用于强制中止进程 |
14 | ALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | TERM | 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9 |
18 | CONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
19 | STOP | 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断 |
2、killall
命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,比如杀死ping
把与ping相关的进程全部杀死:killall ping
2、pkill
pkill [-t 终端号] 进程名
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端终止相应进程
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正发起运行命令者 ##pkill -U zhangsan 把zhangsan用户清退
-t terminal: 与指定终端相关的进程
-l: 显示进程名(pgrep可用)
-a: 显示完整格式的进程名(pgrep可用)
-P pid: 显示指定进程的子进程
w
#使用w命令查询本机已经登录的用户
pkill -9 -t pts/1
#强制杀死从pts/1虚拟终端登陆的进程
二、计划任务
1、at一次性计划任务
- 由包 at 提供
- 依赖与atd服务,需要启动才能实现at任务
- at队列存放在/var/spool/at目录中,ubuntu存放在/var/spool/cron/atjobs目录下
- 执行任务时PATH变量的值和当前定义任务的用户身份一致
2、实操
##一次性任务的格式
at [xx:xx] [xxx-xx-xx]
#交互第一步,写任务内容
普通命令或者脚本
##提交
ctrl + d
##查询(这里有个缺点,并不能查看具体的任务)
atq
##删除任务
atrm 任务序号
2、周期性计划任务
1、关于设置周期性任务的配置文件以及格式
是由/etc/crontab配置文件,表明了周期性任务的书写格式,这个文件是个全局配置文件,写了以后是可以全局生效的
书写crontab时,需要注意的几项格式:
1、6个选项都不能为空,不确定就用*代替,注意注意,第一项为分钟,这个一定要想清楚,*是每分钟,0是整点,最好具体到时间,要不然就是每分钟执行一次,想清楚需求;
2、最小的单位是分钟,所以精确秒做不到!!
3、在定义时间的时候,注意星期和日期区别,容易混淆;
4、在定任务的时候,注意命令使用绝对路径!!!
2、设置周期性任务的方法以及命令
##方法一:
vim /etc/crontab
##方法二:
crontab命令
crontab -e #创建周期性计划
crontab -l #查看当前周期性计划
crontab -r #删除计划任务 注意,删除的时候一次性全删了!!!
crontab -u 用户名 -e #针对用户创建周期性任务
选项 | 功能 |
-u 用户名 | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。 |
-e | 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 注意;这里删了就全删了,建议用crontab -e进入编辑页面删除单条 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
实操案例:14点每分钟创建一个在同名时间文件名
[root@localhost opt]#crontab -l
* 14 * * * /bin/touch /opt/`date +\%F_\%T`
补充:
特殊字符的含义 | ||
项目 | 含义 | 范围 |
第一个"*" | 一小时当中的第几分钟(minute) | 0~59 |
第二个"*" | 一天当中的第几小时(hour) | 0~23 |
第三个"*" | 一个月当中的第几天(day) | 1~31 |
第四个"*" | 一年当中的第几个月(month) | 1~12 |
第五个"*" | 一周当中的星期几(week) | 0~7(0和7都代表星期日) |
特殊字符的含义 | |
特殊符号 | 含义 |
*(星号) | 代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。 |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。 |
拓展练习:
1、每月的 1号 15号 30号
0 0 1,15,30 * *
2、中午 12点 - 16点
0 12-16 * * *
3、每 半小时 执行 一次
30 * * * *
4、每两分钟执行脚本
*/2 * * * *
5、8点到18点之间每2小时
0 8-18/2 * * *
6、每3天的每个整点
0 0 */3 * *
7、每个月 1号 ,5 号 ,15号, 30号 下午 3到6点 执行
0 15-16 1,5,15,30 * *
8、每年1-5月每隔10天的上午和下午10点的10-45分内每隔5分钟执行一次
10-45/5 10,22 */10 1-5 *
9、每周五晚上8点整执行
0 20 * * 5
8、每周日凌晨2点30执行一次
30 2 * * 0
30 2 * * 7
3、补充一点
实操修改了配置文件/etc/crontab文件,也是可以设置计划任务的,但是
①需要完全按照格式,需要指定用户
②不能使用命令crontab -l查看任务
所以建议不要使用