linux定时执⾏shell脚本定时任务
1 #!/bin/bash
2 step=1
3 for ((i=1;i<=60; i+=step))
4 do
5 $(`/usr/local/php-5.6.22/bin/php /root/zhangxiao/zxtest/log.php >> log.html`)
6 sleep $step
7 done
经典多进程跑数据
本⽂讲述crontab具体⽤法,以供备忘.
其中,增加⼀个检查shell执⾏命令: sh -x echo.sh ; 或者 sh -n echo.sh; 还可以查看邮
件/var/spool/mail/root 清空⽂件,然后tail -f /var/spool/mail/root ,看会不会有输出
在oracle 中可以利⽤dbms_job包定时执⾏pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采⽤crontab来完成利⽤crontab来定时执⾏任务⼤致有如下三步:
1、编写shell脚本
2、利⽤crontab加⼊到定时任务队列
3、查看作业完成情况
⼀、如何建⽴shell脚本
下有很多不同的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。
linux循环执行命令脚本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中,周期执⾏的任务⼀般由cron这个守护进程来处理 ps -ef | grep cron
cron读取⼀个或多个,这些配置⽂件中包含了命令⾏及其调⽤时间。
cron的配置⽂件称为“crontab”,是“cron table”的简写。
⼀、 cron在3个地⽅查配置⽂件(设置shell脚本):
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论