开博客为了记录工作上学习到的技术点,和平时学习的笔记,作为积累。
今天在工作中遇到的问题:
在linux服务器上部署批量任务,部署成功;在项目目录下执行startup.sh脚本,执行成功,日志正常;设置定时任务:5 0 * * * /home/********/startup.sh 设置成功;等待定时任务执行,通过查看项目日志发现没有运行。
解决思路:
1.查看定时任务是否启动,已启动
2.在服务器根目录下执行 sh /home/********/startup.sh 执行失败
3.确认项目目录下执行没有问题,检查脚本,发现脚本中部分变量写的是相对路径,比如JAVA_HOME,./lib ,./jar等等,修改为绝对路径,在服务器根目录下执行,没有问题。
4.设置定时任务,等待执行,观察日志,确认执行成功。
解决这个批量任务定时之后,其他批量项目也移交到我手中,部署另一个批量任务,步骤如前进行了检查和修改,设置好后查看执行结果,失败。。。。。。。。。。
崩溃中。。。。。。。
继续检查。。。绝对路径没错;定时任务没错,状态开启;检查crontab黑名单白名单,正常;脚本执行权限,正常;设置切换root用户,依旧失败。
查看crontab日志tail -f /var/log/cron ,这里日志只有简单的输出,无能没有看懂。。。
查看mail信息 tail -f /var/spool/mail/root ,终于发现端倪,这里输出了一行信息:请配置JAVA_HOME。。。。
十分懵逼,因为环境中 profile文件已经配置有JAVA_HOME,虽然startup.sh脚本中没有配置,但是系统环境变量已经有了,不该有此问题。后在startup.sh脚本中配置JAVA_HOME后,定时任务正常执行,具体说明在下方总结。
问题总结:
1.执行脚本中一定要配置绝对路径
2.学会了查看crontab各种日志和异常情况的检查
3.crontab并不会默认的从profile文件中读取环境变量,解决方法有二,第一种,在脚本中再配置一次环境变量,但是降低了复用性;第二种, 在脚本最上方使用 #!/bin/sh ,加载环境变量。