shell脚本控制
信号
- 1——SIGHUP(挂起进程)
- 2——SIGINT(终止进程;Ctrl+C)
- 9——SIGKILL(无条件终止进程)
- 18——SIGSTP(停止或暂停进程,但不终止进程;Ctrl+Z)
- 19——SIGCONT(继续运行停止的进程)
kill -9 PID:无条件终止PID标示的进程
trap "echo ' Sorry! I have trapped Ctrl+C'" SIGINT:捕获信号,并用对应命令对信号进行响应
trap "echo ' I modified the trap!'" SIGINT:修改响应信号命令
trap -- SIGINT:取消对信号的响应,使用 -- 或 - 均可
trap "echo Goodbye..." EXIT:捕获进程退出信号
脚本控制
./test.sh &:使用后台运行脚本,由于其与当前终端共享STDOUT和STDERR,因此最好将脚本输出重定向。此时如果终端退出,所有其创建的进程也将退出。
nohup ./test.sh &:保证创建的进程执行完毕,不受其创建终端的影响。此时,脚本进程的输出也不回在终端显示,其将自动创建nohup.out文件进行存储。不过此时多个进程将共享一个nohup.out文件。
jobs:获取后台的作业(-l:给出PID和作业号;$$:当前进程的PID;作业号后的加号(+)表示当前的默认作业,减号(-)表示下一个默认作业)
bg taskID:以后台模式重启对应作业,如果未提供taskID,则重启默认作业
fg taskID:以前台模式重启对应作业,与bg类似
nice -n 10 ./test,sh > test.out &:为对应进程指定优先级(-20 ——19 越大越nice;bash默认以0启动所有进程)
renice -n 10 -p PID:改变指定运行中进程的优先级
定时作业
at -M -f test.sh now:单次在指定时间运行对应脚本(-M:由于at默认将输出通过邮件发送,如果不想接受邮件或重定向可以使用-M进行屏蔽。如果没有安装sendmail,也无法获得任何输出)系统提供了26个不同等级(a-z;A-Z)的作业队列,字母排序越高越nice,默认提交a队列。
时间格式:10:15; 10:15 PM; now; noon; midnight; teatime (4 PM); MMDDYY; MM/DD/YY; DD.MM.YY; Jul 4; Dec 25;
atq:显示等待执行的作业
atrm:删除等待执行的作业
cron时间表指定需要定期执行的作业(格式:min hour dayofmonth month dayofweek command)。注意command中最好使用文件完整路径。如果需要运行时,刚好系统关闭这些计划并不会在开机时再被执行。
每天10:15(15 10 * * * command)
每周一4:15(15 16 * * 1 command)
每个星期天中午12点(00 12 * * 0 command)(0为周日;6为周六)
每月最后一天中午12点(00 12 * * * if [ `date +%d -d tommorrow` = 01 ] then ; command)
crontab:处理时间表(-l:列出已有cron时间表;-e:添加条目)
cron目录:/etc/cron.daily(每天不定时执行目录下的对应脚本)。同理,/etc/cron.hourly; /etc/cron.monthly; /etc/cron.weekly
anacron:保证未执行计划在重新开机被尽快执行。
时间表:period delay identifier command