linux定时执行脚本
在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" 中有错误,您可以这样来进行调试: