第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 小结
- 第16章 控制脚本
- linux shell 学习之第15章 控制脚本
- 第5章 脚本控制------------------------(以后台模式运行脚本、nohup)
- 第5章 脚本控制-----------------------(启动时启动脚本、随新shell一起启动)
- 第5章 脚本控制------------------------(作业控制、查看作业jobs命令、重新启动停止的作业)
- 第5章 脚本控制------------------------(nice与renice命令、进程优先级控制)
- unity3d 第三天 脚本输入控制
- 第一部分 GeoGeo脚本基础 第6章 分布式计算与进程控制
- 第5章 脚本控制------------------------(处理信号、常用信号、捕获信号、移除捕获)
- 第5章 脚本控制------------------------(at命令、mail命令、batch命令、cron表格、anacron表格)
- 第16章 Debug Shell脚本
- 第13章脚本
- 第16章 成员访问控制
- 【代码大全】第16章 控制循环
- 控制脚本
- 第20章 Lua脚本
- 第13章 复制控制
- 第13章 复制控制
- C# 二叉树的综合操作(一):查找、插入、最大(小)值、先序遍历、后序遍历及中序遍历
- spring 整合 rabbitmq
- Python:文件的读取、创建、追加、删除、清空
- 5、Power Query-抓取网页数据做漂亮的图表
- ehcache配置说明
- 第16章 控制脚本
- 在.NET2.0中使用LINQ
- Junit4学习笔记
- Java中hashCode的作用
- Log4J日志配置详解
- Android 杂项记录
- Oracle-实例化EM配置文件时出错
- Java注解(1)-注解基础
- Android.support.v7.widget.Toolbar学习