当前位置首页 > CentOS知识

Centos7设置定时任务执行脚本失败需设置环境变量

阅读次数:339 次  来源:admin  发布时间:

写了一个服务重启的脚本,发现服务可以正常关闭,但是不能正常启动,参考文末博客解决此问题。

问题描述

写了一个服务重启脚本,手动执行发现可以正常的启停服务。

执行脚本1,脚本名sps_noah_service.sh。

#! /bin/bash
echo "----开始执行noah/sps/tomcat/activemq服务脚本----"
#"cd"后面接Linux系统中activemq的安装目录
# cd /home/techbloom/activeMQ
#以下定义三个方法分别直接进行tomcat的启动,关闭和重启
start(){
   echo -e "\033[32m====启动activemq应用====\033[0m"
   cd /home/techbloom/activeMQ
   sh ./bin/activemq start >/dev/null 2>&1
   echo -e "\033[32m====启动noah_install脚本====\033[0m"
   cd /home/techbloom/Noah-App-install/bin
   sh ./noah.sh start >/dev/null 2>&1
   echo -e "\033[32m====启动tomcat脚本====\033[0m"
   cd /home/techbloom/tomcat8/bin
   sh ./startup.sh >/dev/null 2>&1
}
stop(){
   echo -e "\033[32m====关闭activemq应用====\033[0m"
   # sh ./bin/activemq stop >/dev/null 2>&1
   pids=`ps -ef|grep "activemq.jar"|grep -v "grep"|awk '{print $2}'`
   for pid in $pids
   do
       kill -9 $pid
   done
   echo -e "\033[32m====关闭noah服务====\033[0m"
   cd /home/techbloom/Noah-App-install
   sh ./bin/noah.sh stop
   echo -e "\033[32m====关闭tomcat服务====\033[0m"
   pids=`ps -ef|grep "Bootstrap"|grep -v "grep"|awk '{print $2}'`
   for pid in $pids
   do
       kill -9 $pid
   done
}

#以下定义一个可以根据参数调用上面三个方法的方法

control(){
action=$1
case $action in
start)
     start
     ;;
stop)
     stop
     ;;
*)
      echo "正常的参数应该是 start|stop|restart"
      echo "请重新正确执行脚本"
esac
}
control $1

执行脚本2,脚本名restart_rfidserver.sh,其调用了脚本1。

#!/bin/bash
cd /home/techbloom
echo "----开始关闭rfid服务-`date "+%Y-%m-%d %H:%M:%S"`" >> /home/techbloom/restart_rfidserver_log.txt
sh ./sps_noah_service.sh stop >> /home/techbloom/restart_rfidserver_log.txt
sleep 1m
cd /home/techbloom
sh ./sps_noah_service.sh start >> /home/techbloom/restart_rfidserver_log.txt
echo "----结束启动rfid服务-`date "+%Y-%m-%d %H:%M:%S"`" >> /home/techbloom/restart_rfidserver_log.txt

手动执行脚本2,发现可以正常的关闭和启动服务。

# 重启服务
[root@node01 /home/techbloom]# sh restart_rfidserver.sh
You have new mail in /var/spool/mail/root
# 服务均已启动
[root@node01 /home/techbloom]# jps
2727 Bootstrap
2712 activemq.jar
2762 Jps
2715 NoahServer_JVM

但是将脚本执行加入到crontab定时任务里,发现只能关闭服务,但是不能启动服务。

# crontab任务执行前
[root@node01 /home/techbloom]# jps
1856 NoahServer_JVM
1904 Jps
1868 Bootstrap
1853 activemq.jar
You have new mail in /var/spool/mail/root
# 定时任务
[root@node01 /home/techbloom]# crontab -l
# 早上6点重启服务
0 6 * * * sh /home/techbloom/restart_rfidserver.sh
# 执行完后服务关闭了,但是没启动
[root@node01 /home/techbloom]# jps
2274 Jps

问题排查

将tomcat启动日志打印到本地,提示没有环境变量。由于关闭服务是通过进程号来关闭,所以不受影响,但是启动服务是通过执行服务启动脚本实现,需要加载当前环境变量。

Centos7设置定时任务执行脚本失败需设置环境变量

问题解决

参考文末博文,在脚本里加入环境变量。原因是手动执行脚本2是在当前shell环境下进行的,脚本能找到环境变量。而系统自动执行任务调度时,是不会加载任何环境变量的,因此需要在脚本中指定任务运行所需的环境变量。

#!/bin/bash
# 加载环境变量
source /etc/profile
cd /home/techbloom
echo "----开始关闭rfid服务-`date "+%Y-%m-%d %H:%M:%S"`" >> /home/techbloom/restart_rfidserver_log.txt
sh ./sps_noah_service.sh stop >> /home/techbloom/restart_rfidserver_log.txt
sleep 1m
cd /home/techbloom
sh ./sps_noah_service.sh start >> /home/techbloom/restart_rfidserver_log.txt
echo "----结束启动rfid服务-`date "+%Y-%m-%d %H:%M:%S"`" >> /home/techbloom/restart_rfidserver_log.txt

加入后,定时任务不仅可以关闭服务,也能启动服务了。

参考博客:

(1)https://www.cnblogs.com/youngchaolin/p/11722994.html

(2)https://www.cnblogs.com/intval/p/5763929.html

上一篇:Ubuntu18.04apache2配置ThinkPHP6
下一篇:IISExpress7.5HTTP错误500.22