crontab定时执行shell脚本失败的原因
Posted 平凡之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了crontab定时执行shell脚本失败的原因相关的知识,希望对你有一定的参考价值。
有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题。
crontab -l 查看目前已经设置的crontab信息
crontab -e 编辑定时任务
举例说明
*/1 * * * * jstack 进程号 >> jstack.log
前五个“*”号分别代表“分钟(0-59) 小时(0-23) 天(1-31) 月(1-12) 星期(0-6, 0表示星期日)
上面例子中表示的每隔一分钟就执行一次jstack并将运行结果输出到jstack.log中。
有小伙伴可能会说,这样执行可能会不成功哦,那么问题来了,为什么会不成功?
如果当前你用的是root用户,而且环境变量中如果配置好了java环境变量,那么执行上面的crontab是没问题的,但是如果你用的其他新建的用户,虽然你可能也配置了java环境变量
但是crontab不会读取你其他用户环境变量中的内容,所以解决方案是把执行命令保存成一个shell脚本,在脚本中显示执行当前用户的环境变量,再运行命令输出
1 #!/bin/bash 2 . /etc/profile 3 . ~/.bash_profile 4 echo 获取java进程号 5 pid=`ps -ef|grep java|awk ‘{print $2}‘` 6 echo ${pid} 7 echo 开始记录jstack信息,并输出到根目录的jstack.log 8 jstack ${pid} >> jstack.log
假设上面这段代码保存到jstack.sh文件,这样再设置crontab的时候直接
*/1 * * * * /home/test/jstack.sh
这样就可以啦,观察jstack.log文件的增长情况,这样就避免了使用绝对路径的问题。
以上是关于crontab定时执行shell脚本失败的原因的主要内容,如果未能解决你的问题,请参考以下文章