解决crontab无法读取环境变量

今天在公司服务器上设置一个crontab,*/1 * * * * /bin/sh  /data/tool/jstack.sh,手动sh  /data/tool/jstack.sh是可以执行的,但放到crontab里却无法运行,对脚本头部加上#!/bin/bash还是没有运行.而jstack.sh里的内容是:
#!/bin/bash
echo 堆栈信息记录开始
jstack 24238 >> /data/log/monitor/jstack_$(date +"%Y%m%d%H%M").log
echo "文件路径 /data/log/monitor/jstack_$(date +"%Y%m%d%H%M").log"
echo 堆栈信息记录完毕
 
  
然后再等crontab执行,发现成功.网上搜了下发现了问题所在:
crontab有一个坏毛病,就是它总是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错.
看了这个就知道怎么修改脚本了,脚本的头上用缺省的#!/bin/sh就可以,然后然后第一个部分先写这些:
###################
. /etc/profile
. ~/.bash_profile
##################
这样crontab在执行脚本的时候,就能够读到用户的环境变量参数.如下:
#!/bin/sh
. /etc/profile
. ~/.bash_profile
echo 堆栈信息记录开始
jstack 24238 >> /data/log/monitor/jstack_$(date +"%Y%m%d%H%M").log
echo "文件路径 /data/log/monitor/jstack_$(date +"%Y%m%d%H%M").log"
echo 堆栈信息记录完毕

这样就不用在脚本里写全php路径了.

00 01 * * * /bin/sh /usr/local/shells/timesyn.sh
59 23 * * * /bin/sh /data/tool/log.sh
*/1 * * * * /bin/sh  /data/tool/jstack.sh


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值