CRONTAB调用备份脚本时要注意环境变量的设置详解
Linux命令高级技巧使用crontab进行定时任务管理
Linux命令高级技巧使用crontab进行定时任
务管理
在Linux系统中,我们可以使用crontab命令来进行定时任务的管理。crontab是一个用于设置周期性执行任务的命令,可以让我们方便地执
行一些需要定期执行的任务,比如定时备份文件、定时清理日志等。
今天,我们就来学习一些Linux命令高级技巧,如何使用crontab进行
定时任务管理。
一、crontab命令简介
crontab命令是用来设置与取消用户的定时任务的命令。每个用户都
可以使用crontab命令来创建自己的定时任务表。当设置了一个定时任
务后,crond守护进程会每分钟检查一次这些定时任务表,如果发现有
任务需要执行,则会自动执行相应的任务。
二、crontab命令的使用方法
1. 创建定时任务表
要创建一个定时任务表,可以使用 crontab -e 命令来编辑当前用户
的crontab 文件,该文件保存了该用户的所有定时任务。执行该命令后,会自动打开一个文本编辑器,我们可以在其中添加或修改定时任务。
2. 编写定时任务
每一行定义了一个定时任务,格式如下:
* * * * * command
其中,星号 * 表示任意值。从左到右,依次代表了分钟、小时、日期、月份、星期。我们可以根据需求设置特定的数值来指定任务执行的时间。
例如,我们希望每天早上8点执行一个任务,可以写为:
0 8 * * * command
3. 常用的时间设置
(1)用数字指定时间值,取值范围为0-59。例如,0表示0分钟,15表示15分钟。
(2)用星号 * 表示任意值。例如,* * * * * 表示每分钟执行一次。
Linux之crontab命令
Linux 之crontab 命令
简介
通过crontab 命令,我们可以在固定的间隔时间执⾏指定的系统指令或 shell 脚本。时间间隔的单位可以
是分钟、⼩时、⽇、⽉、周及以上的任意组合。这个命令⾮常适合周期性的⽇志分析或数据备份等⼯作。
命令格式
参数详解
-u user :⽤来设定某个⽤户的crontab 服务;
file :file 是命令⽂件的名字,表⽰将file 做为crontab 的任务列表⽂件并载⼊crontab 。如果在命令⾏中没有指定这个⽂件,crontab 命令将接受标准输⼊(键盘)上键⼊的命令,并将它们载⼊crontab 。
-e :编辑某个⽤户的crontab ⽂件内容。如果不指定⽤户,则表⽰编辑当前⽤户的crontab ⽂件。
-l :显⽰某个⽤户的crontab ⽂件内容,如果不指定⽤户,则表⽰显⽰当前⽤户的crontab ⽂件内容。
-r :从/var/spool/cron ⽬录中删除某个⽤户的crontab ⽂件,如果不指定⽤户,则默认删除当前⽤户的crontab ⽂件。
-i :在删除⽤户的crontab ⽂件时给确认提⽰。
crontab ⽂件格式
实际运⽤
创建⼀个新的 crontab ⽂件,向cron进程提交⼀个crontab⽂件之前,⾸先要设置环境变量EDITOR。
cron进程根据它来确定使⽤哪个编辑器编辑crontab⽂件。99%的UNIX和LINUX⽤户都使⽤vi,如果你
也是这样,那么就编辑$HOME⽬录下的. profile⽂件,在其中加⼊这样⼀⾏
然后保存并退出。创建⼀个名为cron的⽂件,其中加上⽤户名,例如, testcron。在该⽂件中加⼊
高级技巧使用crontab进行任务调度与定时执行
高级技巧使用crontab进行任务调度与定时
执行
Crontab是一个在Unix和类Unix系统下用来定期执行任务的工具。通过配置crontab,可以实现自动化定时执行各种任务,如备份文件、
生成报表等。本文将介绍使用crontab进行任务调度与定时执行的高级
技巧。
一、理解Crontab
Crontab是Unix系统下的一个命令,用于执行定时任务。每个用户
都可以创建自己的crontab文件,用来定义需要在特定时间执行的任务。
Crontab文件通常存储在以下位置:
```shell
/var/spool/cron/crontabs/ # 系统全局crontab文件
/var/spool/cron/username # 用户特定的crontab文件
```
Crontab文件的格式如下:
```
分钟小时日期月份星期命令
```
其中,分钟、小时、日期、月份和星期都可以使用特定的数值或通配符表示。例如,`*`表示每个取值范围内的所有数值,`*/2`表示每隔两个数值。
二、常用的Crontab任务调度方式
1. 执行每小时任务
要在每小时的固定分钟执行任务,可以在crontab文件中添加以下行:
```
0 * * * * command
```
其中,`0`表示每小时的0分钟。
2. 执行每天任务
要在每天的固定小时和分钟执行任务,可以在crontab文件中添加以下行:
```
30 9 * * * command
```
其中,`30 9`表示每天的9点30分执行。
3. 执行每周任务
要在每周的固定天和时间执行任务,可以在crontab文件中添加以下行:
crontab环境变量的使用方法
crontab环境变量的使⽤⽅法
环境:(产品,平台,机型,软件版本,等)AIX5L
问题描述:crontab中启动的shell脚本不能正常运⾏,但是使⽤⼿动执⾏没有问题,在$home/.profile中设定了脚本所需要的环境变量。
解答:cron命令的默认shell是/usr/bin/bsh,如果要在cron启动的脚本中使⽤ksh,就必须在脚本中的第⼀⾏添
加“#!/usr/bin/ksh”的声明。
如果cron进程启动的shell脚本要⽤登录时的环境变量,就必须在cron启动的shell脚本中添加下⾯的内容,才能够在启动的脚本中使⽤
$home/.profile⽂件中的环境变量。
.$home/.profile
这是因为cron进程执⾏的shell脚本是不会⾃动加载⽤户⽬录下的.profile⽂件,所以需要脚本⾃⼰加载所需要的环境变量。
================
环境变量⽂件加载顺序
/etc/profile: 此⽂件为系统的每个⽤户设置环境信息,当⽤户第⼀次登录时,该⽂件被执⾏.
并从/etc/profile.d⽬录的配置⽂件中搜集shell的设置.
/etc/bashrc: 为每⼀个运⾏bash shell的⽤户执⾏此⽂件.当bash shell被打开时,该⽂件被读取.
~/.bash_profile: 每个⽤户都可使⽤该⽂件输⼊专⽤于⾃⼰使⽤的shell信息,当⽤户登录时,该⽂件仅仅执⾏⼀次!默认情况下,他设置⼀些环境变量,执⾏⽤户的.bashrc⽂件.
~/.bashrc: 该⽂件包含专⽤于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该⽂件被读取.
LinuxCrontab内环境变量与Shell环境变量的关系及解决问题的办法
LinuxCrontab内环境变量与Shell环境变量的关系及解决问题的
办法
为了定时监控系统CPU、内存、负载的使⽤情况,写了个Shell脚本,当达到⼀定值得时候,发送邮件通知。需要⽤到的定时任务去执⾏这个脚本,但是发现通过命令(./test.sh)执⾏Shell⽂件的时候,可以获取的环境变量;可是通过Crontab做的定时任务,⽆法获取。
查找资料之后发现,crontab有⼀个坏⽑病,就是它总是不会缺省的从⽤户profile⽂件中读取环境变量参数,经常导致在⼿⼯执⾏某个脚本时是成功的,但是到crontab中试图让它定期执⾏时就是会出错。
2种⽅法可以解决这个问题,
1、在Shell⽂件⾥⾯获取环境变量值的路径写成绝对路径,别⽤环境变量的路径值。例如获取CPU的使⽤情况通过绝对路径/proc/cpuinfo 来获取值;
2、Shell脚本缺省的#!/bin/sh开头换⾏后的第⼀⾏⽤
#!/bin/sh
. /etc/profile
. ~/.bash_profile
这样,crontab在执⾏脚本的时候,就能够读到⽤户的环境变量参数
备注:
如果你是在cron⾥提交的,请注意:
不要假定c r o n知道所需要的特殊环境,它其实并不知道。所以你要保证在s h e l l脚本中提供所有必要的路径和环境变量,除了⼀些⾃动设置的全局变量。
分享⼀些关于Crontab的⼩知识
但是最近在使⽤crontab过程中,接连遇到头疼的问题:⼿动执⾏脚本时⼀点问题都没有,可是放在 crontab中脚本死活也不运⾏。最后查出来原因⼀次是因为脚本⾥⾯⽂件路径没有写全路径导致的,另⼀次是因为脚本运⾏需要依赖java环境变量,其实两次都是环境变量的问题造成的。从⽹上同样了解到⼀般crontab⽆法运⾏的问题都是由环境变量在crontab中不⼀定可识别引起的。某前辈总结说:crontab如果不注意的话早晚会出问题,⽽且这种问题⼀旦出⼀次,就会永远记得,因为这种问题很折腾⼈。精辟啊~~
Linux命令高级技巧使用crontab与at进行定时任务管理
Linux命令高级技巧使用crontab与at进行
定时任务管理
在Linux系统中,定时任务管理是一项重要的任务,能够帮助我们自动执行一些重复性的操作。crontab和at是两个非常常用且强大的命令,它们可以帮助我们进行定时任务的管理和执行。本文将介绍如何使用crontab和at命令进行定时任务管理,并分享一些高级技巧。
一、crontab命令
crontab命令用于按照指定时间规则执行命令或脚本。通过编辑crontab文件,我们可以设定定时任务的执行时间、执行频率和执行的命令。
1. 创建和编辑crontab文件
要创建或编辑crontab文件,可以使用以下命令:
```
crontab -e
```
该命令会打开当前用户的crontab文件进行编辑。如果没有设置过定时任务,会打开一个空的文件。
2. 编写定时任务
在打开的crontab文件中,每一行代表一个定时任务。格式如下:
```
* * * * * command
```
其中,`*`表示任意值。前五个`*`分别代表了分钟、小时、日期、月份和星期几,通过设置不同的取值,可以实现不同的任务定时。command则是要执行的命令。
例如,我们可以设置每天的早上6点执行一个备份脚本的定时任务:```
0 6 * * * /path/to/backup.sh
```
这条命令表示在每天的6点整执行`/path/to/backup.sh`脚本。
3. 常用的时间规则
下面是一些常用的时间规则示例:
- `* * * * *`:每分钟都执行一次任务
- `0 * * * *`:每小时整点执行一次任务
【linux】crontab的环境变量问题
【linux】crontab的环境变量问题
今天遇到⼀个奇怪的问题,同样⼀个脚本,⼿动执⾏没问题,加⼊到crontab中,就出现⽆法运⾏的情况,第⼀反应是环境变量问题
环境说明:
操作系统:centos
⽤户:test⽤户通过sudo su切换到root⽤户执⾏脚本和计划任务
程序⽬录:脚本中引⽤的程序在/usr/local/bin⽬录下
1,查看/etc/crontab,发现这⾥有写环境变量,之前没有红框中的⽬录,我⼿动添加以后,重启crontab服务。
service crond restart
重启之后,测试还是不⾏,做了⼀个这样的计划任务
执⾏之后,发现只有/usr/bin:/bin:/usr/sbin
居然没有/usr/local/bin怪不得程序不能运⾏。
2,之后尝试将变量写⼊到家⽬录的.bash_profile中,⽐如/root/.bash_profile中,发现也不⾏,估计是因为这个root是通过test的sudo得来的,没有加载环境变量。
3,终极解决⽅案:
前提:将需要的程序⽬录添加到/etc/profile最后,如下
⽅案⼀:在计划任务中增加source /etc/profile,这样执⾏
⽅案⼆:在脚本的开头中添加source /etc/profile
总结:
个⼈感觉⽅案⼆⽐较合适,有更好的适应性,脚本在新的机器上也可以正常运⾏。另外,就是计划任务启动以后,⼀定要检查是不是真的正确执⾏了
Linux命令行中的环境变量保护和备份技巧
Linux命令行中的环境变量保护和备份技巧在Linux系统中,环境变量是一些用来存储系统配置和运行环境信息的变量。在命令行中,我们经常需要使用环境变量来控制程序的运行,设置路径和配置文件等。然而,由于一些误操作或者恶意行为,环境变量可能会被修改或者删除,导致系统无法正常工作。为了保护和备份环境变量,我们可以采取一些技巧和方法,以确保系统的稳定和可靠性。
1. 导出环境变量
在Linux中,我们可以使用export命令来导出环境变量,让其对当前会话和子进程有效。例如,我们可以使用以下命令导出一个名为PATH的环境变量:
```
export PATH=/usr/local/bin:$PATH
```
这样,在当前会话中,我们就可以使用/usr/local/bin目录下的可执行文件,同时保留原有的PATH设置。
2. 将环境变量写入配置文件
为了保持环境变量的持久性,我们可以将其写入配置文件中。在大多数Linux发行版中,用户的环境变量配置文件通常是~/.bashrc或者
~/.bash_profile。我们可以使用文本编辑器打开这些文件,并添加类似
以下的行:
```
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
```
保存文件后,重新登录或者执行source命令使配置文件生效。
3. 使用环境变量保护脚本
有时候,我们会编写一些重要的脚本,其中可能包含一些敏感信息,如数据库密码等。为了保护这些信息不被泄露,我们可以使用环境变
量来存储这些敏感信息,而不是直接在脚本中写明。例如,我们可以
crontab 实例
crontab 实例
什么是crontab?
如何使用crontab?
为什么使用crontab?
有哪些常见的crontab用法?
如何管理crontab任务?
crontab的一些注意事项?
回答
什么是crontab?
Crontab是一个在UNIX和类UNIX操作系统上的时间基准工具。它允许用户在特定的时间间隔内运行预定的命令或脚本。Crontab的名称来源于其使用的命令行工具`crontab`,它用于安装、编辑和管理用户个人的cron job列表。
如何使用crontab?
要使用crontab,首先需要了解它的格式。一个典型的crontab包含了五个字段,分别表示分钟、小时、日期、月份和星期。这些字段中的每一个
都可以用一个具体的数值或一个通配符来表示。通配符包括星号(*),表示所有值,以及逗号(,)和斜杠(/),用于指定具体的数值范围或间隔。
例如,下面是一个简单的crontab示例,每周五下午3点运行一个shell 脚本:
0 15 * * 5 /home/user/script.sh
在这个示例中,0表示分钟字段,15表示小时字段,*表示日期字段(即每天),5表示月份字段(即每周五),`/home/user/script.sh`是要运行的脚本。
要安装一个crontab任务,可以使用`crontab`命令加上一个选项,例如:crontab -e
这个命令将打开一个文本编辑器,允许您编辑您的crontab列表。每一行都表示一个cron job。通过添加每个cron job的配置,您可以在crontab
crontab标准配置
crontab标准配置
Crontab标准配置。
在Linux系统中,cron是一个非常强大的定时任务工具,而crontab则是用来设置和修改cron定时任务的命令。通过crontab,我们可以方便地配置定时执行的任务,比如定时备份数据、定时清理日志、定时发送邮件等等。在本文中,我们将介绍crontab的标准配置方法,帮助大家更好地使用这一工具。
首先,我们需要了解一下crontab的基本格式。一个标准的crontab配置文件包含了6个字段,分别代表分钟、小时、日期、月份、星期和要执行的命令。这些字段之间用空格或制表符分隔开,如下所示:
```。
command。
```。
其中,每个字段的含义如下:
第1个字段代表分钟,取值范围为0-59;
第2个字段代表小时,取值范围为0-23;
第3个字段代表日期,取值范围为1-31;
第4个字段代表月份,取值范围为1-12;
第5个字段代表星期,取值范围为0-7,其中0和7都代表周日;
第6个字段代表要执行的命令。
接下来,我们来看一些实际的例子,以帮助大家更好地理解crontab的配置方法。
例1,每天凌晨3点执行备份脚本。
```。
0 3 /path/to/backup.sh。
```。
这个配置表示,在每天凌晨3点的时候执行`/path/to/backup.sh`这个备份脚本。
例2,每周一的上午10点执行清理日志任务。
```。
0 10 1 /path/to/clean_logs.sh。
```。
这个配置表示,在每周一的上午10点执行`/path/to/clean_logs.sh`这个清理日志的任务。
crontable语法
crontab语法
1. 什么是crontab?
crontab是一个用于在Unix和类Unix系统上自动执行任务的命令。它允许用户根据特定的时间间隔或日期来安排任务的执行。crontab命令可以创建、修改、删除用户的cron表,cron表中包含了一系列要执行的任务。
2. crontab的基本语法
* * * * * command
上述语法中,星号(*)代表了一个通配符,表示任意值。每个星号代表了不同的时间单位,从左到右依次为:
•分钟(0-59)
•小时(0-23)
•日期(1-31)
•月份(1-12)
•星期几(0-7,其中0和7都代表周日)
command部分表示要执行的命令或脚本。
3. 常用crontab示例
示例一:每天定时备份数据库
0 2 * * * /usr/bin/mysqldump -u username -p password database > /path/to/backu p.sql
上述示例中,0 2 * * *表示每天凌晨2点执行命令。/usr/bin/mysqldump -u username -p password database是备份数据库的命令,将结果输出到
/path/to/backup.sql文件中。
示例二:每小时清理临时文件
0 * * * * rm -rf /tmp/*
上述示例中,0 * * * *表示每小时执行命令。rm -rf /tmp/*是删除/tmp/目录下的所有文件和子目录的命令。
示例三:每周六定时重启服务器
0 0 * * 6 /sbin/reboot
Crontab详细用法-定时任务详解
Crontab详细⽤法-定时任务详解
crontab是或unix系统中常⽤的定时命令,使⽤crontab你可以在指定的时间执⾏⼀个shell脚本或者⼀系列Linux/unix命令。例如系统管理员安排⼀个备份任务使其每天都运⾏,也可以定义个命令每天定时清理垃圾⽂件,那么如何往 cron 中添加⼀个作业?
# crontab –e
0 5 * * * /root/bin/backup.sh
这将会在每天早上5点运⾏ /root/bin/backup.sh
Cron 各项的描述
以下是 crontab ⽂件的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
o minute: 区间为 0 – 59
o hour: 区间为0 – 23
o day-of-month: 区间为0 – 31
o month: 区间为1 – 12. 1 是1⽉. 12是12⽉.
o Day-of-week: 区间为0 – 7. 周⽇可以是0或7.
Crontab ⽰例
1. 在 12:01 a.m 运⾏,即每天凌晨过⼀分钟。这是⼀个恰当的进⾏备份的时间,因为此时系统负载不⼤。
1 0 * * * /root/bin/backup.sh
2. 每个⼯作⽇(Mon – Fri) 11:59 p.m 都进⾏备份作业。
59 11 * * 1,2,3,4,5 /root/bin/backup.sh
下⾯例⼦与上⾯的例⼦效果⼀样:
59 11 * * 1-5 /root/bin/backup.sh
crontab环境变量问题
crontab环境变量问题
今天设置linux定时任务时,python内调⽤的shell指令总执⾏失败,单独调⽤python脚本则⽆问题,考虑到是环境变量未⽣效引起。
故在执⾏crontab -e编辑配置⽂件时,将shell内执⾏env指令得到的环境变量
(PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games)加⼊到任务(31 15 * * * python
/opt/ybs/bin/backup.py >> /opt/ybs/log/backup.log 2>&1)之前。
编辑后的⽂件如下:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
centos crontab 注释
centos crontab 注释
Crontab是CentOS操作系统中一个非常有用的工具,它允许用户在指定的时间间隔内运行预定的任务或命令。通过使用crontab,用户可以在不需要人工干预的情况下自动执行脚本、备份数据、定时发送邮件等等。本文将详细介绍CentOS crontab的使用方法和常见问题解答,帮助您更好地了解和使用这个功能强大的工具。
一、crontab简介:
Crontab是一个由linux/unix操作系统提供的命令,用来定期或固定时间间隔地执行程序,它读取并执行存放在指定目录下的cron table文件。Cron表是一种带有用来指定在指定时间执行某个特定任务的字段的表达式。
二、crontab常见选项和格式
下表是CentOS操作系统中crontab命令的常见选项和格式:
选项描述
-e 编辑当前用户的cron表;
-l 列出当前用户的cron表;
-r 删除当前用户的cron表;
-u user 操作其他用户的cron表,默认操作当前用户的;
-n 在编辑完cron表并保存时,不进行检查;
-i 在删除cron表前提醒用户。
cron表达式的格式是由空格分割为5或6个字段的字符串,每个字段代表时间的一个周期。这5个或6个字段分别表示:
分钟(0 - 59)
小时(0 - 23)
日期(1 - 31)
月份(1 - 12)
星期几(0 - 7)
命令(要执行的命令或程序)
下面是一些实例说明:
1. 在每天凌晨3点运行一个脚本cd /home/user/scripts && bash backup.sh:
armbian crontab用法
armbian crontab用法
Armbian Crontab 用法
Crontab 是一个用于定期执行计划任务的工具,在 Armbian 操作系统中也有广泛应用。本文将向您介绍 Armbian Crontab 的用法,帮助您合理设置定时任务。
一、什么是 Crontab
Crontab 是一种用于执行计划任务的服务。通过在 Crontab 文件中定义任务和执行时间,可以实现在指定时间自动执行任务的功能。在Armbian 中,Crontab 是系统自带的工具,可以轻松地创建和管理计划任务。
二、Crontab 的配置与使用
1. 打开 Crontab 配置文件
要开始使用 Crontab,首先需要打开 Crontab 配置文件。在终端中输入以下命令并回车:
```shell
crontab -e
```
这将会打开一个文本编辑器,显示 Crontab 的配置内容。
2. 添加定时任务
在Crontab 配置文件中,每行表示一个定时任务。每行的格式如下:```
分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-7) 命令
```
例如,如下配置表示每天早上 8 点执行 `/home/user/script.sh` 脚本:```
0 8 * * * /home/user/script.sh
```
3. 编辑定时任务
要修改或添加新的定时任务,只需要编辑打开的 Crontab 文件,并
按照上述格式添加或修改任务即可。修改完成后,保存并关闭编辑器
即可。
4. 保存定时任务
在编辑完成之后,保存并退出 Crontab 文件编辑器。系统将自动保
Linuxcrontab命令详解(含配置文件路径)
Linuxcrontab命令详解(含配置⽂件路径)
编辑/etc/crontab ⽂件配置cron
cron 服务每分钟不仅要读⼀次/var/spool/cron内的所有⽂件,还需要读⼀次/etc/crontab,因此我们配置这个⽂件也能运⽤cron服务做⼀些事情。⽤crontab配置是针对某个⽤户的,⽽编辑/etc/crontab是针对系统的任务。此⽂件的⽂件格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使⽤者运⾏的路径,这⾥是根⽬录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每⼩时执⾏/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执⾏/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执⾏/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每⽉去执⾏/etc/cron.monthly内的脚本
#####################################################################################################
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
我们知道,EXP备份是DBA常规操作之一,尤其是10g以前的版本没有EXPDP,所有的逻辑备份都是通过EXP来实现。而将EXP写成SHELL脚本,使之可以调用也并没有什么特别之处。不过如果并非oracle用户执行,而是需要CRONTAB自动允许,那么备份的脚本就有一些要求了。
客户环境使用RMAN CATALOG方式备份,而RMAN的CATALOG数据库采用EXP进行逻辑备份。部署了一个每天7点运行的CRONTAB,调用执行EXP的SHELL。巡检时发现这个脚本从未真正运行过。
1./app/oracle10g> crontab -l
2.0 7 * * * /app/oracle10g/rman_catalog_dmp/exp_by_date.sh
3./app/oracle10g/rman_catalog_dmp> more exp_by_date.sh
4.export ORACLE_SID=RMANDB
5.export ORACLE_BASE=/app/oracle10g
6.export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
7.export NLS_LANG=American_America.ZHS16CGB231280
8.exp parfile=exp.par file=./rman_catalog.dmp log=./rman_catalog.log
由于是CRONTAB进行调用,因此不会使用oracle用户的环境变量,这就需要在shell脚本中添加必要的环境变量的设置,这才能是的EXP命令可以正确的运行。脚本中虽然已经设置了一些环境变量,但是还是不够的。
对于CRONTAB运行SHELL时出现的错误,可以通过用户的mail来获取错误信息:
1./app/oracle10g/rman_catalog_dmp> mail
2.From root@acap3 Thu Aug 18 07:00:01 EAT 2011
3.Received: (from root@localhost)
4.by acap3 (8.9.3 (PHNE_35950)/8.9.3) id HAA27754
5.for oracle; Thu, 18 Aug 2011 07:00:01 +0800 (EAT)
6.Date: Thu, 18 Aug 2011 07:00:01 +0800 (EAT)
7.From: root@acap3
8.Message-Id: <201108172300.HAA27754@acap3>
9.Subject: cron
10./app/oracle10g/rman_catalog_dmp/exp_by_date.sh[5]: exp: not found.
11.*************************************************
12.Cron: The previous message is the standard output
13.and standard error of one of your crontab commands:
14.
15./app/oracle10g/rman_catalog_dmp/exp_by_date.sh
显然导致错误的原因是执行EXP命令时,在默认目录下没有找到EXP可执行命令,显然脚本中漏设了PATH环境变量。
增加PATH=$ORACLE_HOME/bin环境变量后,再次测试发现,参数文件找不到,仿照导出文件和日志文件的方式,将参数文件设置为./exp.par,问题依旧。看来在CRONTAB中调用SHELL,应该设置绝对路径,而不能设置相对路径。
最终脚本修改为:
1./app/oracle10g/rman_catalog_dmp> more /app/oracle10g/rman_catalog_dmp/exp_by_date.sh
2.export ORACLE_SID=RMANDB
3.export ORACLE_BASE=/app/oracle10g
4.export ORACLE_HOME=$ORACLE_BASE/product/10.2.0
5.export NLS_LANG=American_America.ZHS16CGB231280
6.export PATH=$ORACLE_HOME/bin:$PATH
7.DATE=`date +"%Y%m%d"`
8.exp parfile=/app/oracle10g/rman_catalog_dmp/exp.par file=/app/oracle10g/rman_catalog_dmp/rman_catalog_$DATE.dmp log=/app/oracle10g/rman_cat
9.alog_dmp/rman_catalog_$DATE.log
10.you have mail in /var/mail/oracle
利用CRONTAB来实现SHELL的自动调用,需要注意两个问题,第一是否在SHELL中设置了必要的环境变量;第二尽量所有的文件都采用完全路径方式,避免使用相对路径。
来源:网络编辑:联动北方技术论坛