码迷,mamicode.com
首页 > 系统相关 > 详细

Linux01-BASH脚本编程之信号捕捉及任务计划53

时间:2014-06-13 21:06:11      阅读:473      评论:0      收藏:0      [点我收藏+]

标签:varname   word   cron   at   anacron   

一、脚本编程知识点

    1、获取变量中字符的长度:${#VARNAME}

    2、变量赋值:

        a)${parameter:-word}:如果parameter为空或未定义,则变量展开为“word”;否则,展开为parameter的值;

    如:A=3

echo ${A:-30}

unset A

echo ${A:-30}

        b)${parameter:+word}:如果parameter为空或未定义,不做任何操作;否则,则展开为“word”值;

    如:echo ${A:+30}

A=1 

echo ${A:+30}

        c)${parameter:=word}:如果parameter为空或未定义,则变量展开为“word”,并将展开后的值赋值给parameter;

    如:unset A

echo {A:=30}

        d)${parameter:offset}:offest表示跳过几个;

        e)${parameter:offset:length}:截取子串,从offset处的后一个字符开始,取lenth长的子串;

    如:A=‘Hello world’

echo {A:2:3}

    3、脚本配置文件

/etc/rc.d/init.d/服务脚本,服务脚本支持配置文件:/etc/sysconfig/服务脚本同名的配置文件

    4、变量作用域,局部变量:local VAR_NAME=

    如:编辑一个脚本,注意其中函数定义加local和不加local的区别

#!/bin/bash

#

a=1

test() {

  local a=$[3+4]

}


test

for I in `seq $a 10`; do

  echo $I

done  

    5、命令mktemp:创建临时文件或目录,避免与其他文件名重复

        mktemp /tmp/file.XX(tmp目录默认30天清理一次)

-d: 创建为目录

二、信号捕捉

    1、信号:

        kill -SIGNAL PID

    1: HUP

    2: INT

    9: KILL

    15: TERM

    2、脚本中,能实现信号捕捉,但9和15无法捕捉

        Ctrl+c: SIGINT

    3、信号捕捉命令:trap

trap ‘COMMAND‘ 信号列表

        如:编辑一个脚本,捕捉Ctrl+c信号; 

#!/bin/bash

#

trap ‘echo "You go ..."‘ INT

while :;do

date

sleep 2

done

    4、一行执行多个语句,语句间用分号分隔;


脚本实例:

    创建脚本ping.sh,捕捉Ctrl+c信号。并清理脚本运行中产生的临时文件。

#!/bin/bash

#

NETWORK=192.8.8.

FILE=`mktemp /tmp/file.XX`

clearup() {

        echo "quit..."

        rm -rf $FILE

        exit 1

}

trap ‘clearup‘ INT

for I in `seq 10 200` ;do

        if ping -c 1 -w 1 $NETWORK$I &> /dev/null;then

                echo "$NETWORK$I is up." | tee >> $FILE

        else

                echo "$NETWORK$I is down."

        fi

done


三、任务计划

    1、任务计划方式:

        a)在未来的某个时间点执行一次某任务;

            at

            batch

b)周期性地执行某任务;

            cron


    2、at相关 

        a)使用格式:

            at 时间

            at> COMMAND

            at> Ctrl+d

        b)指定时间格式:

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

            相对时间:now+#

            单位:minutes, hours, days, weeks

            模糊时间:noon, midnight, teatime

        c)选项:

            at -l = atq :显示作业

            at -d AT_JOB_ID = atrm AT_JOB_ID :删除某个作业

        d)/etc/at.deny和/etc/at.allow文件

            控制使用at命令的用户

        e)命令的执行结果:将以邮件的形式发送给安排任务的用户;

    3、cron相关:

        cron:自身是一个不间断运行的服务,运行在线主机上。

        anacron:cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务,在恢复正常执行一次;

        a)cron: 

            a1)系统cron任务:定义在/etc/crontab中

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

            a2)用户cron任务:定义在/var/spool/cron/USERNAME中

                格式:分钟 小时 天 月 周 任务

        b)时间的有效取值:

            b1)分钟:0-59

            b2)小时:0-23

            b3)天:1-31

            b4)月:1-12

    b5)周:0-7,0和7都表示周日

        c)时间通配表示:

            c1)*:对应的所有有效取值:

                如:每小时的第三分钟:3 * * * *

                    每周每小时的第三分钟:3 * * * 7 

                    每天的12点13分:13 12 * * *

    每月6号12点13分:13 12 6 * *

    每年的7月6号12点13分:13 12 6 7 *

            c2),:离散时间点取值:

如:每小时的10分和40分:10,40 * * * *

    每周二周五的每小时的10分40分:10,40 * * * 2,5 

    每周二周五的2点的10分40分:10,40 02 * * 2,5 

            c3)-:连续时间点:

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

            c4)/#:对应取值范围内每多久一次,

如:每3分钟一次:*/3 * * * *

    每2小时:01 */2 * * *

    每隔1小时:* */2 * * *

    每隔一天:10 04 */2 * *

        d)执行结果将以邮件形式发送给管理员;

如:只把错误的执行结果发送给管理员:

    */3 * * * * /bin/cat /etc/fstab > /dev/null

e)cron的环境变量:cron执行的所有命令都去PATH环境变量指定的路径下去找,在脚本中添加:

#!/bin/bash

export PATH=/bin:/sbin:/usr/bin:/usr/sbin

f)用户任务管理命令:crontab

    -l:列出当前用户的所有cron任务

    -e:编辑cron任务

    -r:移除所有cron任务

    -u USERNAME:管理其他用户的cron任务

g)cron服务

    service crond status

            chkconfig --list crond

    4、anacron相关

a)/etc/anacrontab文件字段(最小时间单位是每天)

    第一段:过去几天未执行

    第二段:开机后的第多少分钟开始运行

    第三段:表示注释信息

    第四段:表示执行的任务

b)anacron服务默认是关闭的:

    service anacron status

cron任务练习:

    配置本机每隔两天在凌晨3点20分备份一次/etc目录,备份文件存放至/backup/etc目录。文件名形如:etc-2012-06-20.tar.bz2

    20 03 */2 * * root /bin/tar -jcf /backup/etc/etc-`date +%F`.tar.bz2 /etc/*

本文出自 “Nick Liu的博文” 博客,请务必保留此出处http://zkhylt.blog.51cto.com/3638719/1426060

Linux01-BASH脚本编程之信号捕捉及任务计划53,布布扣,bubuko.com

Linux01-BASH脚本编程之信号捕捉及任务计划53

标签:varname   word   cron   at   anacron   

原文地址:http://zkhylt.blog.51cto.com/3638719/1426060

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!