第16章 控制脚本

来源:互联网 发布:克里米亚战争 知乎 编辑:程序博客网 时间:2024/05/17 08:14

16.1 处理信号
Linux利用信号与运行在系统中的进程进行通信。

16.1.1 重温Linux信号
这里写图片描述
这里写图片描述

16.1.2 生成信号
1 中断进程
Ctrl+C组合键会生成SIGINT信号,并将其发送给当前在shell中运行的所有进程。
2 暂停进程
Ctrl+Z组合键会生成以恶搞SIGSTP信号,停止shell中运行的任何进程。

16.1.3 捕获信号
trap命令允许你来指定shell脚本要监看并从shell中拦截的linux信号
trap commands signals
在trap命令行上,只要列出想要shell执行的命令,以及一组空格分开的待捕获的信号。可以用数值或Linux信号名来指定信号。
这里写图片描述

16.1.4 捕获脚本退出
可以在shell脚本退出时进行捕获。
这里写图片描述

16.1.5 修改或移除捕获
要想在脚本中的不同位置进行不同的捕获处理,只需重新使用带有新选项的trap命令。
也可以删除已设置好的捕获。只需要在trap命令与希望恢复默认行为的信号列表之间加上两个破折号就行了。
trap – SIGINT
也可以在trap命令后使用单破折号来恢复信号的默认行为。

16.2 以后台模式运行脚本
以后台模式运行shell脚本非常简单,只要在命令后加个&符就行了。
这里写图片描述

16.2.2 运行多个后台作业
nohup命令的格式如下:
nohup ./test1.sh &
由于nohup命令会解除终端与进程的关联,进程也就不再痛STDOUT和STDERR联系在一起。为了保存该命令产生的输出,nohup命令会自动将STDOUT和STDERR的消息重定向到一个名为nohup.out的文件中。

16.4 作业控制
启动、停止、终止以及恢复作业的这些功能统称为作业控制。

16.4.1 查看作业
作业控制中的关键命令是jobs命令。jobs命令允许查看shell当前正在处理的作业。
这里写图片描述
这里写图片描述

16.4.2 重启停止的作业
在bash作业控制中,可以将已停止的作业作为后台进程或前台进程重启。

要以后台模式重启一个作业,可用bg命令加上作业号。
这里写图片描述

要以前台模式重启作业,可用带有作业号的fg命令。

16.5 调整谦让度
调度优先级是个整数值,从-20(最高优先级)到+19(最低优先级)。默认bash shell以优先级0来启动所有进程。

16.5.1 nice命令
nice命令允许你设置命令启动时的调度优先级。要让命令以更低的优先级运行,只要用nice的-n命令行来指定新的优先级级别。
这里写图片描述

16.5.2 renice命令
改变系统上已运行命令的优先级,使用renice命令。

16.6 定时运行任务

16.6.1 用at命令来计划执行作业
at命令会将作业提交到队列中,指定shell何时运行该作业。at的守护进程atd会以后台模式运行,检查作业队列来运行作业。
atd守护进程会检测系统上的一个特殊目录(/var/spool/at)来获取用at命令提交的作业。默认会每60秒检查一下这个目录。
1 at命令的格式
at [ -f filename ] time

2 获取作业的输出
Linux系统会默认将提交给该作业的用户的电子邮件作为STDOUT和STDERR.
因此需要进行重定向。
这里写图片描述

3 列出等待的作业
atq命令可以查看系统有哪些作业在等待。
这里写图片描述

4 删除作业
用atrm命令来删除等待中的作业。
这里写图片描述

16.6.2 安排需要定期执行的脚本
Linux系统使用cron程序来安排要定期执行的作业。cron程序会在后台运行并检查一个特殊的表(被称作cron时间表),以获知已安排执行的作业。
1 cron时间表
cron时间表格式:
min hour dayofmonth month dayofweek command

2 构建cron时间表
crontab命令来处理cron时间表,用-l选项列出cron时间表。
用-e选项添加cron时间表条目。

3浏览cron目录
可以使用预配置的cron脚本目录,包括hourly、daily、monthly和weekly
这里写图片描述
因此,如果脚本需要每天运行一次,只要将脚本复制到daily目录,cron就会每天执行它。

4 anacron程序
如果某个作业在cron时间表中安排运行的时间已到,但这时候Linux系统处于关机状态,那么这个作业就不会被运行。
如果anacron知道某个作业错过了执行时间,它会尽快运行该作业。
这个功能常用于进行常规日志维护的脚本。

16.6.3 使用新shell启动脚本
每次启动一个新shell时,bash shell都会运行.bashrc文件。在.bashrc文件添加语句。

16.7 小结

0 0
原创粉丝点击