linux命令创建pl脚本,linux定时执⾏shell脚本定时任务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
linux循环执行命令脚本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脚本):
1、/var/spool/cron/yanggang这个⽬录下存放的是每个⽤户(包括root)的crontab任务,每个任务以创建者的名字命名,⽐如⽤户tom
建的crontab任务对应的⽂件就是/var/spool/cron/tom
yanggang@barry$sudo ls -l /var/spool/cron/(或有时是 /var/spool/cron/crontabs/)-rw------- 1 root crontab 1071 2011-
09-19 17:20 root
-rw------- 1 yanggang crontab 1176 2011-09-24 11:07 yanggang⼀般⼀个⽤户最多只有⼀个crontab⽂件(如:root,yanggang 等),其对应⽇志在/var/spool/mail/root(或/var/spool/mail/yanggang)⽂件⾥
2、/etc/crontab 这个⽂件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# .---------------- minute (0 - 59) # | .-------------hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR#sun,mon,tue,wed,thu,fri,sat # | | | | |# * * * * * command to be executed
例如:
*/5 * * * * root /usr/libexec/atrun
minute:代表⼀⼩时内的第⼏分,范围 0-59。
hour:代表⼀天中的第⼏⼩时,范围 0-23。
mday:代表⼀个⽉中的第⼏天,范围 1-31。
month:代表⼀年中第⼏个⽉,范围 1-12。
wday:代表星期⼏,范围 0-7 (0及7都是星期天)。
who:要使⽤什么⾝份执⾏该指令,当您使⽤ crontab -e 时,不必加此字段。
command:所要执⾏的指令。
3、/etc/cron.d/这个⽬录⽤来存放任何要执⾏的crontab⽂件或脚本。
⼆、 权限crontab权限问题到/var/adm/cron/下⼀看,⽂件cron.allow和cron.deny是否存在⽤法如下: 1、如果两个⽂件都不存在,则
只有root⽤户才能使⽤crontab命令。 2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow⽂件⾥的⽤户才能使⽤
crontab命令,如果root⽤户也不在⾥⾯,则root⽤户也不能使⽤crontab。 3、如果cron.allow不存在, cron.deny存在,则只有列在
cron.deny⽂件⾥⾯的⽤户不能使⽤crontab命令,其它⽤户都能使⽤。 4、如果两个⽂件都存在,则列在cron.allow⽂件中⽽且没有列在cron.deny中的⽤户可以使⽤crontab,如果两个⽂件中都有同⼀个⽤户,以cron.allow⽂件⾥⾯是否有该⽤户为准,如果cron.allow中有
该⽤户,则可以使⽤crontab命令。 AIX 中 普通⽤户默认都有 crontab 权限,如果要限制⽤户使⽤ crontab ,就需要编
辑/var/adm/cron/cron.deny HP-UNIX 中默认普通⽤户没得crontab 权限 ,要想放开普通⽤户的crontab 权限可以编
三、 创建cron脚本第⼀步:写cron脚本⽂件,命名为。15,30,45,59 * * * * echo "" >> 表⽰,每
隔15分钟,执⾏打印⼀次命令 第⼆步:添加定时任务。执⾏命令 “”。搞定 第三
步:"crontab -l" 查看定时任务
是否成功或者检测/var/spool/cron下是否⽣成对应cron脚本
四、 cron服务 cron是⼀个linux下 的定时执⾏⼯具,可以在⽆需⼈⼯⼲预的情况下运⾏作业。 /sbin/service crond start //启
动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload
//重新载⼊配置 /sbin/service crond status //查看服务状态
例如:使⽤sudo停⽌与启动服务
yanggang@barry$sudo service cron stop
cron stop/waiting
yanggang@barry$sudo service cron start
cron start/running, process 7502
五、crontab⽤法crontab命令⽤于安装、删除或者列出⽤于驱动cron后台进程的表格,⽤户把需要执⾏的命令序列放到crontab⽂件中以获得执⾏。每个⽤户都可以有⾃⼰的crontab⽂件,/var/spool/cron下的crontab⽂件不可以直接创建或者直接修改,该crontab⽂件是通过crontab -e命令创建的在crontab⽂件中如何输⼊需要执⾏的命令和时间,该⽂件中每⾏都包括六个域,其中前五个域是指定命令被执⾏的时间,最后⼀个域是要被执⾏的命令。每个域之间使⽤空格或者制表符分隔。格式如下:minute hour day-of-month month-of-year day-of-week commands合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了数字还有⼏个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字
"/"代表每的意思,"/5"表⽰每5个单位,"-"代表从某个数字到某个数字,","分开⼏个离散的数字。
-l 在标准输出上显⽰当前的crontab。-r 删除当前的crontab⽂件。
-e 使⽤VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab⽂件。
当结束编辑离开时,编辑后的⽂件将⾃动安装。
⼏个例⼦:每天早上6点0 6 * * * echo "Good morning." >> / //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。每两个⼩时0 */2 * * * echo "Have a brea
k now." >> /晚上11点到早上8点之间每两个⼩时和早上⼋点0 23-7/2,8 * * * echo "Have a good dream" >> /每个⽉的4号和每个礼拜的礼拜⼀到礼拜三的早上11点0 11 4 * 1-3 command line1⽉1⽇早上4点0 4 1 1 * command line SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 HOME=/每⼩时(第⼀分钟)执⾏/etc/cron.hourly内的脚本01 * * * * root run-parts /etc/cron.hourly
每天(凌晨4:02)执⾏/etc/cron.daily内的脚本02 4 * * * root run-parts /etc/cron.daily
每星期(周⽇凌晨4:22)执⾏/etc/cron.weekly内的脚本22 4 * * 0 root run-parts /etc/cron.weekly
每⽉(1号凌晨4:42)去执⾏/hly内的脚本42 4 1 * * root run-parts /hly
注意:"run-parts"这个参数了,如果去掉这个参数的话,后⾯就可以写要运⾏的某个脚本名,⽽不是⽂件夹名。每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执⾏命令。5,15,25,35,45,5516,17,18* * * command每周⼀,三,五的下午3:00系统进⼊维护状态,重新启动系统。0015* *1,3,5shutdown -r +5每⼩时的10分,40分执⾏⽤户⽬录下的innd/bbslin这个指令:10,40 * * * * innd/bbslink每⼩时的1分执⾏⽤户⽬录下的bin/account这个指令:1* * * * bi
n/account每天早晨三点⼆⼗分执⾏⽤户⽬录下如下所⽰的两个指令(每个指令以;分隔):203* * * (/bin/rm -f expire.ls
logins.bad;bin/expire$#@62;expire.1st)每年的⼀⽉和四⽉,4号到9号的3点12分和3点55分执⾏/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个⽂件之后(mm.txt⽂件位于⽤户⾃⼰的⽬录位置)。
12,5534-91,4* /bin/rm -f expire.1st$#@62;$#@
六、⼏个问题
crond 进程没有运⾏
1. 启动crond进程
/etc/init.d/crond start
2. 开机⾃启动crond进程
chkconfig crond on
crontab 编辑:
输⼊编辑命令: crontab -e
# m h dom mon dow command
SHELL=/bin/bash
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论