Linux作业调度机制(10)

一:Linux计划任务at命令

1.1:at应用场景

未来的某个时间点执行一次某个任务。

如果在企业管理中,有一个任务要在以后的一个时间里运行一次,那就使用at命令设置任务执行时间与执行的任务便可。

如果任务比较复杂,可将命令写成脚本并在at命令中调用。

一次性计划任务:at(临时的计划任务)

1.2:at服务的安装

[root@huazai007 ~]# yum -y install at
[root@huazai007 ~]# systemctl start atd
[root@huazai007 ~]# systemctl status atd

1.3:at命令选项解读

1.3.1:at命令格式

at 时间   回车
at>命令(临时要执行的任务!)
at>Ctrl+D结束

指定时间支持多种形式:

绝对时间:HH:MM       DD.MM.YY    MM/DD/YY

相对时间:now+3minutes   tomorrow +3days   
单位:minutes hours days weeks

模糊时间:noon(中午12点)  teatime(下午四点) midnight(午夜0点)
[root@huazai007 ~]# at 15:35
at> touch /tmp/1535.txt
at> <EOT>
job 2 at Sat Oct 24 15:35:00 2020

[root@huazai007 ~]# at 25.10.2020
at> touch /tmp/1024.txt
at> <EOT>
job 3 at Sun Oct 25 15:30:00 2020

[root@huazai007 ~]# at 10/25/2020
at> touch /tmp/aa.txt
at> <EOT>
job 4 at Sun Oct 25 15:31:00 2020

[root@huazai007 ~]# at now+10minutes
at> touch /tmp/bb.txt
at> <EOT>
job 5 at Sat Oct 24 15:42:00 2020

1.3.2:查看at作业列表

命令:at -l或atq
作业号  执行时间   队列(将不同作业放入不同队列分类) 用户
[root@huazai007 ~]# at -l
2	Sat Oct 24 15:35:00 2020 a root
3	Sun Oct 25 15:30:00 2020 a root
4	Sun Oct 25 15:31:00 2020 a root
5	Sat Oct 24 15:42:00 2020 a root
[root@huazai007 ~]# atq
2	Sat Oct 24 15:35:00 2020 a root
3	Sun Oct 25 15:30:00 2020 a root
4	Sun Oct 25 15:31:00 2020 a root
5	Sat Oct 24 15:42:00 2020 a root

1.3.2:查看某个计划任务的详细内容

 at -c 工作号

1.3.3:删除at作业

命令:at -d或atrm 作业号
例:at -d 2

二:Linux计划任务crontab命令

2.1:crontab应用场景

crond 和crontab是不可分割的。

crontab是一个命令,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

crond是crontab的守护进程。

启动服务:

systemctl start crond

2.2:crontab计划任务的编写格式

编写cron计划任务的格式

格式:分  时  天  月  周 用户  任务

2.2.1:时间的通配符(*)

*:对应的所有有效取值

3  * *   *   *     每小时的第3分钟
3  * *   *   7     每个周日的每小时的第3分钟
3  12 *   *   *     每天的12点3分
3  12 *   *   5     每周五的12点3分
3  12 6   *   *     每月6号的12点3分
3  12 6   7   *     每年7月6号的12点3分

2.2.2:离散时间点取值(,)

10 ,40  * * * * 每小时的第10分钟和第40分钟
10 ,40  * * * 2,5 每周二和周五的每小时的第10分钟和第40分钟

2.2.3:连续时间点(-)

10  02  *  *  *  1-5  每周一到五的2点10分

2.2.4:频率(/)

/:对应取值范围每多久一次
*/3  *  *  *  *      每3分钟

2.3:craontab应用管理

编辑
crontab –e
查看  
crontab -l     
移除所有(移除一条:编辑中修改)
crontab –r
管理其他用户的计划任务
crontab -u username

2.4:crond应用举例

59 23 * * * /etc/init.d/httpd restart 
表示每晚的23:59重启apache

45 4 1 * * /etc/init.d/httpd restart  
表示每月1日的4:45分重启apache

45 4 1,10,22 * * /etc/init.d/httpd restart  
表示每月1、10、22日的4 : 45重启apache

10 1 * * 6,0 /usr/local/apache/bin/apachectl restart  
表示每周六、周日的1 : 10重启apache

0,30 18-23 * * * /usr/local/apache/bin/apachectl restart  
表示在每天18 : 00至23 : 00之间每隔30分钟重启apache

* */1 * * * /usr/local/apache/bin/apachectl restart  
每一小时重启apache

* 23-7/1 * * * /usr/local/apache/bin/apachectl restart  
晚上11点到早上7点之间,每隔一小时重启apache

三:Linux进程控制(信号)

3.1:信号的概念解读

信号是linux系统为了响应某些状况而产生的事件。

进程收到信号后应该采取相应的动作 。

信号是进程之间传递信息的方式。

查看系统信号:

kill -l

Linux系统中常用信号:

信号 描述
SIGHUP 用户从终端注销,所有已启动进程都将收到该进程。系统缺省状态下对该信号的处理是终止进程。
SIGINT 程序终止信号。程序运行过程中,按Ctrl+C键将产生该信号。
SIGQUIT 程序退出信号。程序运行过程中,按Ctrl+\键将产生该信号。
SIGBUS和SIGSEGV 进程访问非法地址。
SIGFPE 运算中出现致命错误,如除零操作、数据溢出等。
SIGKILL 用户终止进程执行信号。shell下执行kill -9发送该信号。
SIGTERM 结束进程信号。shell下执行kill 进程pid发送该信号。
SIGALRM 定时器信号。
SIGCLD 子进程退出信号。如果其父进程没有忽略该信号也没有处理该信号,则子进程退出后将形成僵尸进程。
USR1 被用来告知应用程序重载配置文件
INT(快速关闭)

TERM(快速关闭)
是请求彻底终止某项执行操作,它期望接收进程清除自给的状态并退出。

HUP(平滑启动)重新加载配置文件。

QUIT:从容关闭。

3.2:生成信号

3.2.1:中断进程

使用ctrl+c组合键可以生产SIGINT信号

用sleep命令测试 
[root@wzp ~]# sleep 100 
如果不使用ctrl+c组合键,那么控制台就无法进行输入了,一直运行该sleep程序,通过这方法可以终止进程。 

3.2.2: 暂停进程

有些进程想暂停而不是终止它。(挂起进程并放入后台)
可以使用ctrl+z组合键生产SIGTSTP信号

[root@wzp ~]# sleep 100 
[1]+  Stopped                 sleep 100 

看到没有,如果是暂停进程会有log信息显示stopped的。 如上可以看到中括号里面有一个1数值就是shell分配的作业编号.

第一个启动的进程分配作业编号1
第二个启动的进程分配作业编号2
依此类推,如果shell会话中存在停止的作业,退出shell时会发出警告信号的.

3.3:前台进程与后台进程

前台进程需前台控制,所以只有等进程结束才能回到输入命令提示符状态。

而后台不需前台控制,启动后可以回到命令提示符状态继续执行其它进程。例如,linux中许多守护进程,以及一些服务进程。

使用&命令把作业放到后台执行

格式
命令  &

实例:

vim   /etc/passwd  &

用cat命令查看/etc/passwd 文件

3.4:linux进程控制

显示系统中所运行进程的详细信息

ps -aux

kill命令
停止系统中的进程运行

格式
kill   进程号
示例: kill  213

强制停止系统中的进程运行

格式
kill -9  进程号	
示例: kill -9  2135

结束后台作业

格式
kill %作业号
示例:kill %2

四:Linux作业调度

4.1:jobs命令

查看当前有多少在后台运行的命令

[root@huazai007 ~]# jobs 
[1]-  已停止               sleep 100
[2]+  已停止               vim /etc/passwd

4.2:fg

将后台中的命令调至前台继续运行

fg 2
将后台作业号为2的作业调至前台继续运行

4.3:bg

将一个在后台暂停的命令,变成继续执行

[root@huazai007 ~]# tailf /var/log/messages 
Oct 24 21:38:56 huazai007 chronyd[733]: Selected source 185.19.184.35

执行ctrl+z 将此进程挂起(后台,暂停)

[root@huazai007 ~]# jobs 
[1]+  已停止               tailf /var/log/messages

[root@huazai007 ~]# bg 1
[1]+ tailf /var/log/messages &
[root@huazai007 ~]# jobs 
[1]+  运行中               tailf /var/log/messages &

将后台暂停的作业变成后台继续执行

4.4:nohup

如果正在运行一个进程,而且在退出帐户时(exit)该进程还不会结束,那么可以使用nohup命令。该命令可以在退出帐户之后继续运行相应的进程。 nohup就是不挂起的意思( no hang up)。

格式
nohup command &

实例


nohup sleep 300 &

猜你喜欢

转载自blog.csdn.net/zhangshaohuas/article/details/109146256