转自:http://blog.csdn.net/jingxiangren/article/details/4745631

在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成

本文讲述crontab具体用法,以供备忘.

在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成

利用crontab来定时执行任务大致有如下三步:

1、编写shell脚本

2、利用crontab加入到定时任务队列

3、查看作业完成情况

一、如何建立shell脚本

Linux下有很多不同的shell,但我们通常使用bash(bourne again shell)进行编程,因为bash是免费的并且很容易使用

程序必须以下面的行开始(必须方在文件的第一行):

#! /bin/sh

符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。

当编辑好脚本时,要想执行脚本,必须使脚本可以执行

下面的命令,可以使脚本可以执行

chmod +x filename

然后可以输入./filename来执行脚本。

注:在shell编程时,#符号表示注释,只该行结束为止。在编写程序时,最好使用注释。

变量

shell下所有变量都以字符串表示,变量不需要声明,直接使用。直接对变量进行赋值

A="hello world"

取出变量用$符号,如:

#! /bin/sh

A="hello world"

echo "A is:"

echo $A

执行该脚本输出结果如下:

A is :

hello world

shell 命令和流程控制

1)unix命令

在shell中可以使用任意的unix命令,但这里介绍一些更常用的unix命令

echo ''this is a example" :打印输出到屏幕

ls:列出文件列表

cp sourcefile destinationfile :拷贝文件

2)概念:管道,重定向和backtick

这些不是系统命令,但他们经常使用,很重要的

管道 | 将一个命令的输出作为另外一个命令的输入

grep -qa compat | more

重定向:将命令的结果输出到文件,而不是标准输出(屏幕)

〉写入文件并覆盖旧文件

〉〉输出追加到文件的尾部,保留旧文件。

3)流程控制

if ... ; then

...

else if ...;then

...

else

...

fi

通常情况下,可以通过测试命令来对条件进行测试,比如可以比较字符串,判断文件是否存在及是否有执行权限等等

通常用“ [ ] “来表示条件测试,注意这里空格很重要,要确保方括号空格

[ -f "somefile" ] :判断是否是一个文件 [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 [ -n "$var" ] :判断$var变量是否有值 [ "$a" = "$b" ] :判断$a和$b是否相等

实例  一般编程步骤

任何优秀的脚本都应该有帮助和输入参数,并且写一个伪脚本framework.sh,该脚本包含了大多数脚本都需要的框架结构。

是个非常不错的注意。这时候,我们编写脚本时只需要执行cp命令即可

cp framework.sh myscript

然后插入自己需要的函数就可以了

调试

最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。

  shell也有一个真实的调试模式。如果在脚本"strangescript" 中有错误,您可以这样来进行调试:

sh -x strangescript

  这将执行该脚本并显示所有变量的值。

  shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:

sh -n your_script

  这将返回所有语法错误。

Redhat linux AS 3 下定时执行任务

二、cron调度进程

c r o n是系统主要的调度进程,可以在无需人工干预的情况下运行作业。有一个叫做  c r o n t a b的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个c r o n t a b文件  来保存调度信息。可以使用它运行任意一个s h e l l脚本或某个命令,每小时运行一次,或一周  三次,这完全取决于你。每一个用户都可以有自己的c r o n t a b文件,但在一个较大的系统中,  系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过  c r o n . d e n y和c r o n . a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。  3.1.1 crontab的域  为了能够在特定的时间运行作业,需要了解c r o n t a b文件每个条目中各个域的意义和格式。  下面就是这些域:  第1列分钟1~5 9  第2列小时1~2 3(0表示子夜)  第3列日1~3 1  第4列月1~1 2  第5列星期0~6(0表示星期天)  第6列要运行的命令     crontab的范例格式:  下面是c r o n t a b的格式:  分< >时< >日< >月< >星期< >要运行的命令  其中< >表示空格。  C r o n t a b文件的一个条目是从左边读起的,第一列是分,最后一列是要运行的命令,它位  于星期的后面。  在这些域中,可以用横杠-来表示一个时间范围,例如你希望星期一至星期五运行某个作  业,那么可以在星期域使用1 - 5来表示。还可以在这些域中使用逗号“,”,例如你希望星期一  和星期四运行某个作业,只需要使用1 , 4来表示。可以用星号*来表示连续的时间段。如果你  对某个表示时间的域没有特别的限定,也应该在该域填入*。该文件的每一个条目必须含有5  个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用#来表示。     crontab条目举例  这里有c r o n t a b文件条目的一些例子:  30 21* * * /apps/bin/cleanup.sh  上面的例子表示每晚的2 1 : 3 0运行/ a p p s / b i n目录下的c l e a n u p . s h。  45 4 1,10,22 * * /apps/bin/backup.sh  上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/ a p p s / b i n目录下的b a c k u p . s h。  10 1 * * 6,0 /bin/find -name "core" -exec rm {} ;  上面的例子表示每周六、周日的1 : 1 0运行一个f i n d命令。  0,30 18-23 * * * /apps/bin/dbcheck.sh  上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/ a p p s / b i n目录下的d b c h e c k . s h。  0 23 * * 6 /apps/bin/qtrend.sh  上面的例子表示每星期六的11 : 0 0 p m运行/ a p p s / b i n目录下的q t r e n d . s h。     你可能已经注意到上面的例子中,每个命令都给出了绝对路径。当使用c r o n t a b运行s h e l l  脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。记住,既然是用户向c r o n  提交了这些作业,就要向c r o n提供所需的全部环境。不要假定c r o n知道所需要的特殊环境,它  其实并不知道。所以你要保证在s h e l l脚本中提供所有必要的路径和环境变量,除了一些自动  设置的全局变量。     命令形式:  c r o n t a b命令的一般形式为:  Crontab [-u user] -e -l -r  其中:  -u 用户名。  -e 编辑c r o n t a b文件。  -l 列出c r o n t a b文件中的内容。  -r 删除c r o n t a b文件。  如果使用自己的名字登录,就不用使用- u选项,因为在执行c r o n t a b命令时,该命令能够  知道当前的用户     建一个新的crontab文件     在考虑向c r o n进程提交一个c r o n t a b文件之前,首先要做的一件事情就是设置环境变量  E D I TO R。c r o n进程根据它来确定使用哪个编辑器编辑c r o n t a b文件。9 9 %的U N I X和L I N U X用  户都使用v i,如果你也是这样,那么你就编辑$ H O M E目录下的. p r o f i l e文件,在其中加入这样  一行:  EDITOR=vi; export EDITOR  然后保存并退出。  不妨创建一个名为< u s e r > c r o n的文件,其中< u s e r >是用户名,例如, j a m e s c r o n。在该文件中加入如下的内容。  #。。。。这里是解释的话  0,15,30,45 18-06 * * * /bin/echo 'time'>/dev/console     保存并退出。确信前面5个域用空格分隔。  在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,  从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用t t y 1来表  示控制台,可以根据实际情况对上面的例子进行相应的修改。  为了提交你刚刚创建的c r o n t a b文件,可以把这个新创建的文件作为c r o n命令的参数:  $ crontab jamescron  现在该文件已经提交给c r o n进程,它将每隔1 5分钟运行一次。  同时,新创建文件的一个副本已经被放在/ v a r / s p o o l / c r o n目录中,文件名就是用户名(即,  james)。     列出crontab文件:     为了列出c r o n t a b文件,可以用:  你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对c r o n t a b文件做一备  份:  $ crontab -l > $HOME/mycron  这样,一旦不小心误删了c r o n t a b文件,可以用上一节所讲述的方法迅速恢复。     编辑crontab文件:     如果希望添加、删除或编辑c r o n t a b文件中的条目,而E D I TO R环境变量又设置为v i,那么  就可以用v i来编辑c r o n t a b文件,相应的命令为:  $ crontab -e  可以像使用v i编辑其他任何文件那样修改c r o n t a b文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。  保存并退出。最好在c r o n t a b文件的每一个条目之上加入一条注释,这样就可以知道  它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。  可以使用前面讲过的crontab -l命令列出它的全部信息     为了删除c r o n t a b文件,可以用:  $ crontab -r

三,可以利用重定向命令来输出运行结果

> ,>>

四、具体实例

sh脚本文件:test.sh

#! /bin/sh

su - oracle << EOF

sqlplus test/test@test @"test.sql"

sql脚本文件:test.sql

insert into test_tb values (sysdate);

crontab文件:

0,15,30,45 * * * * /apps/bin/test.sh

linux 定时执行shell脚本的更多相关文章

  1. 【转】linux 定时执行shell脚本

    在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...

  2. Linux 定时执行shell脚本命令之crontab

    crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件 ...

  3. linux定时执行shell脚本

    写一个shell脚本,定时执行简单示例 很多时候我们有希望服务器定时去运行一个脚本来触发一个操作,比如说定时去备份服务器数据.数据库数据等 不适合人工经常做的一些操作这里简单说下 Shell俗称壳,类 ...

  4. Linux 定时执行shell脚本_crontab

    1.查看任务[oracle@XXXXX OracleBackA]$ crontab -l 2.新增任务[oracle@XXXXX OracleBackA]$ crontab -e 3.每天14点40执 ...

  5. 使用crontab,让linux定时执行shell脚本

    阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. 编辑crontab文件 4. 流程举例 5. 几个例子 Linux中,周期执行的任务一般由cron这个守护进程来处理. ...

  6. 【Linux】使用crontab,让linux定时执行shell脚本

    阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. vim编辑crontab文件 4.Cron各项描述 5.例子解释 Linux中,周期执行的任务一般由cron这个守护进 ...

  7. Linux定时执行.sh脚本

    因为测试ffmpeg推流用flv方式的话没有做自动断流,所以要先用.sh脚本来执行关流,降低CPU和其他资源占用 首先编写.sh文件 #! /bin/bash echo "kill ffmp ...

  8. Linux终端执行shell脚本,提示权限不够的解决办法

    原文:http://blog.csdn.net/this_capslock/article/details/17415409 今天在Linux尝试搭建dynamips的工作环境,在执行shell脚本时 ...

  9. Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

随机推荐

  1. nodejs http.get乱码问题处理方法

    var req = http.get(url,function(res){ res.setEncoding('utf-8'); var html = '' res.on('data',function ...

  2. 快速入门cocos2d-x jsbinding

    如果你是一个cocos2d-x的老手,那你可以忽略这篇博文,如果你是一个接触过javascript,想通过HTML5做游戏的,但是苦于不知道如何下手,那么这篇博文可能会帮到你. cocos2dx-js ...

  3. python 安装中的错误解决

    最近使用python3.5,其中遇到安装中的错误,现在记录下来,提个醒 1 安装setuptools 出现缺少 zlib模块 解决: 1 yum install zlib 2 yum install ...

  4. CSS3+HTML5学习笔记(1)

    box内阴影: -moz-box-shadow:inset 30px #; -webkit-box-shadow:inset 30px #; box-shadow:inset 30px #; 多重文字 ...

  5. php批量上传图片并把图片名放入数据库

    前几天工作中要做这样一个功能,有八百多个系统 生成的会员:给这八百多个系统会员上传图片:然后把图片名放入数据库. 第一步: 第一步肯定是首先把图片上传到对应的图片目录下,直接用框架中已经有的上传类: ...

  6. iPhone开发:Objective C 代码规范-iOS总结版

    一,关于空行 A:.h中的空行 1,文件说明与头文件包涵(#import)之间空1行 2,头文件包涵(#import)之间,如果需要分类区别,各类别之间空1行 3,头文件包涵(#import)与@cl ...

  7. 热门usb无线网卡

    拓实 N910 N95 N82 N81 N89 都是3070的 拓实 N87 G618 是8187的硬功夫 216 310 217 218 300 315 335 350 370 380 510 53 ...

  8. JAVA中,字符串STRING与STRINGBUILDER的效率差异

    如果可变字符串操作较多的话,用STRINGBUILDER显然优势得多. public class HelloJava { public static void main(String[] args) ...

  9. Android中的SQLiteOpenHelper类

    SQLiteOpenHelper是Android提供的一个管理数据库的工具类,可用于管理数据库的创建和版本更新.一般的用法是创建SQLiteOpenHelper的子类,并扩张它的onCreate(SQ ...

  10. 虚拟机LUN扩大后,重新分区

    [root@ywcrmdb ~]# fdisk -l Disk /dev/sda: 751.6 GB, 751619276800 bytes 255 heads, 63 sectors/track, ...