解决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执行时出现报错。具体与环境变量有关系,下文描述比较清楚。
1471 0
|
6月前
|
存储 运维 Serverless
函数计算产品使用问题之在YAML文件中配置了环境变量,但在PHP代码中无法读取到这些环境变量,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
Shell
Shell 执行 .sh 文件(配置、介绍文件权限)
Shell 执行 .sh 文件(配置、介绍文件权限)
614 0
|
Linux
【Linux命令200例】chmod设置文件或目录的访问权限
在Linux系统中,chmod命令用于设置文件或目录的访问权限。它允许你控制谁可以读取、写入和执行文件。
472 0
|
Shell Java
crontab使用环境变量
两种方式: 1)直接在crontab中定义变量,如: A=123 * * * * * echo $A > /tmp/a.txt 注意在定义变量时不能使用$引用其它变量,如下面的做法错误: A=123 B=$A 2)在/etc/environment中定义变量 此文件定义变量的格式为:NAME=VALUE,和crontab相关,也不能使用$引用其它变量。
1548 0