Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案
实际开发场景
需要开发一个Flink监控程序,初步使用shell脚本进行监控,如果发现失败了,则自动重新运行Flink命令行参数进行重启。
遇到的问题
编写好shell脚本后,在linux命令行调用 sh shell.sh进行测试,成功实现监控和重启功能。于是利用crontab对脚本进行定时调度监控。
后来发现,当Flink失败时确实发出了监控报警,但是却没有自动重启。经排查后发现,应该是脚本中Flink命令行启动Flink任务没有成功,但是在Linux控制台中测试又没问题,这是什么原因呢?
查找资料之后发现,crontab有一个坏毛病,就是它总是不会缺省的从用户profile文件中读取环境变量参数,经常导致在手工执行某个 脚本时是成功的,但是到crontab中试图让它定期执行时就是会出错。
错误原因
所以原因就在于,crontab没有去读环境变量,需要再脚本中手动引入环境变量
恍然大悟,于是尝试在脚本中加入了引入环境变量的配置:
#!bin/bash
source /etc/profile
source ~/.bash_profile
...
再执行时,问题解决。文章来源:https://www.toymoban.com/news/detail-613365.html
原来就是因为crontab在执行脚本时没有读取环境变量,导致执行Flink命令行出错文章来源地址https://www.toymoban.com/news/detail-613365.html
到了这里,关于Linux Crontab定时执行脚本出错,但手动执行脚本正常原因及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!