《Linux命令行与shell脚本编程大全》第十六章
原创- 2023-12-21 15:05:21
- 1262
本篇目录
16.1 处理信号
1.重温 Linux 信号
Linux系统和应用程序可以生成超过30个信号。常见的信号如下图所示:2.生成信号:在需要停止或暂时失控程序时非常方便
(1)中断进程
Ctrl+C组合键会发送SIGINT信号,停止shell中当前运行的进程。
(2)暂停进程
Ctrl+Z组合键会生成一个SIGTSTP信号,停止shell中运行的任何进程。
3.捕获信号
trap命令允许指定shell脚本要监看并从shell中拦截的Linux信号。命令格式:trap commands signals
4. 捕获脚本退出
要捕获shell脚本的退出,只要在trap命令后加EXIT信号就可以。5.修改或移除捕获
重新使用带有新选项的trap命令可以对脚本中不同位置进行捕获处理。使用trap命令与单破折号可以恢复信号的默认行为。
16.2以后台模式运行脚本
在用ps命令时,运行在Linux系统上的一系列不同进程为后台运行进程。1. 后台运行脚本
以后台模式运行shell脚本只需要在命令后加个&符2. 运行多个后台作业
通过ps命令,可以看到所有脚本处于运行状态。16.3在非控制台下运行脚本
当想在终端会话中启动shell脚本,让脚本一直以后台模式运行到结束,即使已经退出了终端会话时,可以使用到nohup命令。nohup命令运行了另外一个命令来阻断所有发送给该进程的SIGHUP信号,会在退出终端会话时阻止进程退出。
为了保存该命令产生的输出,nohup命令会自动将STDOUT和STDERR的消息重定向到一个名为nohup.out的文件中。
16.4作业控制
(1)查看作业
jobs命令允许查看shell当前正在处理的作业(2)重启停止的作业
当要以后台模式重启一个作业时可用bg命令加上作业号。16.5调整谦让度
调度优先级是内核分配给进程的CPU时间。调度优先级是个整数值,从-20(最高优先级)到+19(最低优先级)。默认情况下,bash shell以优先级0来启动所有进程。
1. nice 命令
当想要改变shell脚本的优先级时,不管是降低它的优先级,还是给予它更高的优先级都可以使用nice命令。2. renice 命令
当想要改变系统上已运行命令的优先级,可以使用renice命令。renice 命令的使用条件:
(1)只能对属于你的进程执行renice
(2)只能通过renice降低进程的优先级
(3)root用户可以通过renice来任意调整进程的优先级
16.6定时运行作业
1. 用 at 命令来计划执行作业
at命令允许指定Linux系统何时运行脚本。
(1)at命令的格式:at [-f filename] time
其中-f参数来指定用于读取命令的文件名;time参数指定了Linux系统何时运行该作业。at命令能识别多种不同的时间格式:
- 标准的小时和分钟格式:19:59
- AM/PM指示符:7:59PM
- 特定可命名时间,比如now、noon等
- 标准日期格式
- 文本日期:Jul 4或Dec 25
- 指定时间增量:例如明天10:15 PM
(2)获取作业的输出
(3)列出等待的作业
atq命令可以查看系统中有哪些作业在等待。
(4)删除作业
使用atq命令后知道了哪些作业在作业队列中等待,可以使用atrm命令+作业号来删除等待中的作业。
2.安排需要定期执行的脚本
(1)cron时间表
cron时间表采用一种特别的格式来指定作业何时运行。格式为:min hour dayofmonth month dayofweek command
例如:想在每天的10:15运行一个命令,则cron时间表条目:15 10 * command
(2)构建cron时间表
可以使用crontab -l命令来列出已有的cron时间表。(3)浏览cron目录
(4)anacron程序
如果某个作业在cron时间表中安排运行的时间已到,但这时候Linux系统处于关机状态,那么这个作业就不会被运行。当系统开机时,cron程序不会再去运行那些错过的作业。这时可以使用到anacron程序,该程序在Linux系统重启后会自动运行原定在关机期间运行的作业。但是anacron程序只会处理位于cron目录的程序,并用时间戳来决定作业是否在正确的计划间隔内运行了。
基本格式:period delay identifier command
其中period条目定义了作业多久运行一次,以天为单位;delay条目会指定系统启动后anacron程序需要等待多少分钟再开始运行错过的脚本;identifier条目是一种特别的非空字符串,用于唯一标识日志消息和错误邮件中的作业;command条目包含了run-parts程序和一个cron脚本目录名。
需要注意的是:anacron程序不会处理执行时间需求小于一天的脚本。