Centos7設置定時任務執行腳本失敗需設置環境變量


寫了一個服務重啟的腳本,發現服務可以正常關閉,但是不能正常啟動,參考文末博客解決此問題。

問題描述

寫了一個服務重啟腳本,手動執行發現可以正常的啟停服務。

執行腳本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啟動日志打印到本地,提示沒有環境變量。由於關閉服務是通過進程號來關閉,所以不受影響,但是啟動服務是通過執行服務啟動腳本實現,需要加載當前環境變量。

問題解決

參考文末博文,在腳本里加入環境變量。原因是手動執行腳本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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM