crontab与环境变量,以及应该注意的一些问题

首先,在开篇之前,先附上一份cron图片,此图片是我从Jenkins的Poll SCM插件的帮助中截取的,有兴趣的可以去了解下……




今天在网上看到一篇文章,关于crontab的,其中有两点提到了crontab和环境变量,以及需要注意的一些事项,基础,但是个人觉得说的特别的好,很多时候容易犯错的往往就是这些基础,这里转载一下。。。好记性不如烂笔头。。。
原文请参看:
http://yunhaozou.org/linux/109.html

2. 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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
crontab中定义环境变量有两种方式。首先,可以直接在crontab中定义变量,可以通过在crontab中的命令前添加变量名和值来实现。例如,可以在crontab中使用如下的方式定义变量A为123: A=123 * * * * * echo $A > /tmp/a.txt 需要注意的是,在这种方式下,不能使用$来引用其他变量。另一种方式是在/etc/environment文件中定义变量。这个文件定义变量的格式为NAME=VALUE,和crontab相关,同样不能使用$来引用其他变量。操作系统在登录时使用的第一个文件就是/etc/environment文件,该文件包含指定所有进程的基本环境的变量。需要注意的是,不要在/etc/environment文件中使用类似"PATH=$PATH:/usr/local/jdk/bin"这样的语法,否则可能导致系统无法启动。 如果想要保持多台机器的crontab一致,但是变量值并不完全相同,可以考虑将变量配置在/etc/environment中,这样crontab就可以保持一致。例如,机器1的配置为A=123,机器2的配置为A=456,可以在两者的crontab中使用相同的命令,如下所示: * * * * * echo "$A" > /x.txt 一般不建议直接修改/etc/environment文件,而是可以在目录/etc/profile.d下新增一个.sh文件来替代。但是如果想要在crontab中生效,则只能修改/etc/environment文件,经测试/etc/profile.d方式不起作用。需要注意的是,在/etc/environment中设置的变量在shell中并不生效,但在crontab中是有效的。 关于cron的环境变量问题,还有一个可以参考的图片来源于Jenkins的Poll SCM插件的帮助文档,可以进一步了解cron的使用和环境变量的配置。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [crontab使用环境变量](https://blog.csdn.net/weixin_34001430/article/details/89870952)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [crontab环境变量,以及应该注意的一些问题](https://blog.csdn.net/sho_ko/article/details/84374756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值