首先,在开篇之前,先附上一份cron图片,此图片是我从Jenkins的Poll SCM插件的帮助中截取的,有兴趣的可以去了解下……
今天在网上看到一篇文章,关于crontab的,其中有两点提到了crontab和环境变量,以及需要注意的一些事项,基础,但是个人觉得说的特别的好,很多时候容易犯错的往往就是这些基础,这里转载一下。。。好记性不如烂笔头。。。
原文请参看:
http://yunhaozou.org/linux/109.html2. crontab与环境变量
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh
3. 其他应该注意的问题
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。
最近遇到了一些sh不能在crontab定时任务中自动执行的问题
期间由于不太了解,故走了一点弯路,现在总结下来可能第一次
进行设置遇到的问题。以绝后患!我所用过的操作系统为HP-unix&linux&sco-unix,均测试通过
1,首先确保sh脚本具有可执行属性
即chmod +x***.sh
或chmod +777 ***.sh
2,确保sh脚本手工执行正常
即在当前系统内手工执行sh脚本以后能收到自己期望得到的结果
3,加载环境变量
这个问题是经常容易被忽略的问题,通常我们在第二步的时候手动执行脚本能得到自己想要的结果,可是设置好crontab之后,总不能得到自己想要的结果,总感觉脚本没有被执行。或者执行后没有得到正常的结果。很多均是由于没有加载所在用户的环境变量所引起的。因此最好在自己的脚本首两行添加环境变量的导入。如下:其中telstar是我在操作系统下所在的用户。在该目录下执行ls -a可以查看到.cshrc文件。我们在自己的sh脚本中增加source 该文件,将本用户的环境变量加载,那么以下的内容就能正常被执行了
#!/bin/csh#source /telstar/.cshrc
下面贴出我的定时重启tomcat的一个例子
#!/bin/csh#source /telstar/.cshrckill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`cd /telstar/tomcat/binsleep 15./startup.sh &
其实这里不加载环境变量的话,sh前加上绝对路径,应该也可以,这个没有测试,有兴趣的朋友可以尝试一下
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
sleep 15
/telstar/tomcat/bin./startup.sh &
总之很多手动能正常执行的sh,crontab不能执行大多数情况是由于没有加载环境变量引起的,这里贴出来,以绝后患
#!/bin/csh
#source /telstar/.cshrc
kill -9 `ps -ef | grep Djava.uti | grep -v tail | grep -v vi | grep -v grep | awk '{print $2}'`
cd /telstar/tomcat/bin
sleep 15
./startup.sh &
一般情况下需要修改环境变量配置
改统一
vi ~/.bash_profile
分享到:
相关推荐
通常情况下,用户环境中会设置一些环境变量,例如语言环境变量 LANG,但是当 crontab 执行时,这些环境变量将失效。因此,在 crontab 环境中,无法正确地处理中文字符,导致输出结果出现乱码。 解决方案: 为了解决...
7. **安全与注意事项**:`crontab`的任务执行环境相对纯净,不包含用户的环境变量。因此,在编写定时任务时,应确保所有需要的环境变量、路径和依赖项都在脚本中明确指定。另外,为了安全起见,定期检查`crontab`...
在 crontab 文件中可以设置环境变量,例如: ```bash MAILTO=root ``` 此设置会将所有 cron job 的输出邮件发送给 root 用户。 #### 七、注意事项 - 执行 cron job 的时候,如果命令中有空格或特殊字符,请确保它们...
1. 更新系统的PATH环境变量,将Cygwin的bin目录添加到其中,例如`D:\appmes\Cygwin\bin`。 2. 安装并启动`cron`服务,使用`cygrunsrv`命令进行配置,使其即使在Cygwin命令窗口关闭后仍能运行,并设置为开机启动。 3....
此外,crontab中运行的程序会被送到shell执行,该shell仅具有三个环境变量:USER, HOME, SHELL。因此,如果脚本中需要其他环境变量,需要在脚本中显式地设置。 需要注意的是,在生产环境中,一些任务的调度需要谨慎...
- `-e`:编辑crontab文件,系统默认使用VI编辑器,可以通过设置`VISUAL`环境变量选择其他编辑器。 - `-l`:列出当前用户的crontab任务。 - `-r`:删除当前用户的crontab任务。 - `-v`:查看crontab任务的状态。 ...
7. **环境变量**:crontab任务执行时,其环境可能与交互式登录会话不同,因此需要特别注意环境变量的设置,比如PATH。 8. **权限管理**:每个用户都有自己的crontab文件,root用户还可以通过`crontab -u 用户名`来...
在使用 crontab 时,需要特别注意环境变量的问题。例如,在执行 Oracle 的 sqlplus 命令时,需要设置相关的环境变量。在执行文件中必须列出这些环境变量。 例如,下面是一个执行 sqlplus 命令的示例: ```bash ...
如果需要其他环境变量,你需要在`crontab`命令行中明确设置它们。 **特殊字符和范围:** - `*`:代表所有可能的值,例如在分钟字段中,`*`表示每分钟执行一次。 - `/n`:表示每n个单位执行一次,如`*/5`表示每5...
使用 Crontab 命令时需要注意的是,运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致。一个比较保险的做法是在运行的脚本程序中自行设置环境变量 (export) 。 在使用 Crontab 命令时,还需要注意...
- 环境变量:`crontab`任务执行时的环境变量可能与交互式登录环境不同,因此在脚本中直接设置所需的环境变量(如`export`)是必要的。 - 脚本路径:确保`crontab`任务中引用的脚本或程序有正确的执行权限和可找到的...
在使用 Crontab 时,需要注意的是,运行脚本中能够访问到的环境变量和当 Crontab 前测试环境中的环境变量未必一致。一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)。 要使用 Crontab,需要首先...
需要注意的是,在使用 Crontab 的时候,要特别注意的是运行脚本中能够访问到的环境变量和当前测试环境中的环境变量未必一致,一个比较保险的做法是在运行的脚本程序中自行设置环境变量(export)。 在使用 Crontab ...
在编辑Crontab时,需要注意环境变量的问题。因为Cron执行的任务可能不会继承用户登录时的环境变量,因此,如果任务依赖于特定的环境变量,需要在脚本中显式地设置这些变量,例如使用`export`命令。 此外,Crontab...
与用户计划任务不同,`/etc/crontab`允许设置全局环境变量,并指定任务执行时使用的用户身份。 ### `crontab`命令用法 - **查看计划任务**:使用`crontab -l`命令可以查看当前用户的计划任务。`root`用户可以通过`...
- 检查环境变量是否正确传递给crontab环境。 通过上述步骤,你可以有效地在Ubuntu系统上使用crontab来设置定时任务,自动化执行各种脚本和程序。这对于提高工作效率、减少重复劳动具有重要意义。
在使用`crontab`时,要注意执行的脚本可能无法访问与当前登录环境完全相同的环境变量。因此,最好在脚本中显式设置必要的环境变量,如`export`命令。 当对`crontab`配置文件进行更改后,记得重启`cron`服务以使更改...
与Linux和FreeBSD等其他Unix-like系统相比,Solaris的`crontab`命令在使用上存在一些差异,这使得对它不太熟悉的用户可能会遇到一些困扰。 1. **查看和编辑crontab任务** 在Linux和FreeBSD中,你可以使用`crontab ...