当前位置: 代码迷 >> SQL >> crontab 定时sqlplus 疏失
  详细解决方案

crontab 定时sqlplus 疏失

热度:674   发布时间:2016-05-05 13:30:17.0
crontab 定时sqlplus 出错

今天打算用linux去定时select自己每天上班都要查的数据。但对于linux的定时任务一无所知,so,从零学起:


Linux里面使用crontab命令来执行定时任务。


1,查看当前有哪些定时任务

crontab -l


2,编写新的定时任务。在这里编辑任务的操作模式和 vi 一样。

crontab -e,

3,保存定时的结果

  例1:每天5:30执行ls命令,并把结果输出到/jp/test文件中

  30 5 * * * ls >/jp/test 2>&1

  注:2>&1 表示执行结果及错误信息。

计划任务的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段,
格式如下:mi hh dd mm dw command

解释:

?

? ? mi ? ? 每小时的第几分钟执行该任务 ,取值范围 0~59

  hh ? ? 每天的第几个小时执行该任务?,取值范围 0~23

  dd ? ? 每月的第几天执行该任务?,取值范围 1~31

  mm ? ? 每年的第几个月执行该任务?,取值范围 1~12

  dw???? 每周的第几天执行该任务?,取值范围 0~6,0表示周日

  command ? 指定要执行的程序

?

举例如下:

  5 ? ? ?* ? ? ? * ? ? ? ?*????? *???? ls ? ? ? 指定每小时的第5分钟执行一次ls命令

  30 ? ? 5 ? ? * ? ? ? ?* ? ? ?*???? ls ? ? ? 指定每天的 5:30 执行ls命令

  30???? 7 ? ? 8 ? ? ? *????? * ? ? ls ? ? ? 指定每月8号的7:30分执行ls命令

  30???? 5 ? ? 8 ? ? ? 6 ? ? * ? ? ls ? ? ? 指定每年的6月8日5:30执行ls命令

  30???? 6 ? ? * ? ? ? ?* ? ? 0 ? ? ls ? ? ? 指定每星期日的6:30执行ls命令 [ 注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。 ]

  30???? 3 ? ? ? 10,20???? * ? ? ?* ? ? ls ? ? ? 每月10号及20号的3:30执行ls命令 [注:“,”用来连接多个不连续的时段 ]

  25???? 8-11 ? ? * ? ? ? ? ?* ? ? ?* ? ? ls?????? 每天8-11点的第25分钟执行ls命令 [注:“-”用来连接连续的时段 ]

  */15 ? ? ? * ? ? ? * ? ? ? ? ?* ? ? ?* ? ? ls ? ? ? 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

  30 ? ? ?6????? */10 ? ? ? ? *????? * ? ? ls ? ? ? 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]


简单的了解了crontab的用法后,开始建立第一个定时任务,脚本如下:

cd /home/oracle

. .bash_profile

sqlplus [email protected]_NAME <<!

select * from tab;

exit;

!


结果报错:

1, .bash_profile: file not found

2, sqlplus :command not found

第一个错误的解决方法是:使用source /home/oracle/.bash_profile,既然你找不到,我就给你个绝对路径。

第二个错误的解决方式和第一个类似,也是使用绝对路径,但还是想不通。既然已经成功source 环境变量了,系统就应该可以成功找到sqlplus的路径了的。

修改后的脚本是

#!/bin/bash


cd /home/oracle

source /home/oracle/.bash_profile

/home/oracle/oracle/product/11.2.0/client/bin/sqlplus [email protected]_NAME <<!

select * from tab;

exit;

!

?

总结:在脚本里面使用命令最好把命令的绝对路径加上


?

  相关解决方案