解决crontab无法读取环境变量

简介: 解决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


目录
相关文章
|
分布式计算 Java Hadoop
crontab环境变量问题
在crontab中运行脚本来查看hadoop相关信息,由于hadoop、java默认部署在/usr/local下面, 所以导致crontab执行时出现报错。具体与环境变量有关系,下文描述比较清楚。
1456 0
|
6月前
|
存储 弹性计算 运维
自动修改计划任务配置文件
【4月更文挑战第29天】
40 0
|
6月前
|
Unix Shell Linux
在Shell中,对文件和目录进行操作
在Shell中,对文件和目录进行操作
72 1
|
Shell
Shell 执行 .sh 文件(配置、介绍文件权限)
Shell 执行 .sh 文件(配置、介绍文件权限)
570 0
|
分布式计算 Hadoop 大数据
Shell脚本-修改/etc/hosts文件
在学习大数据配置hadoop集群使用虚拟机的时候,每次开机集群各个机器的ip都可能发生变化,但修改静态ip又不太会操作,写个脚本来操作
shell 脚本中包含环境变量的设置命令需要用 source 命令执行才会生效
shell 脚本中包含环境变量的设置命令需要用 source 命令执行才会生效
|
Shell Java
crontab使用环境变量
两种方式: 1)直接在crontab中定义变量,如: A=123 * * * * * echo $A > /tmp/a.txt 注意在定义变量时不能使用$引用其它变量,如下面的做法错误: A=123 B=$A 2)在/etc/environment中定义变量 此文件定义变量的格式为:NAME=VALUE,和crontab相关,也不能使用$引用其它变量。
1537 0