经典重温- - 手动执行没问题,crontab 执行就报错。

服务器信息:操作系统:CentOS Linux  版本 7 (Core)

前言:我们开发人员经常会遇到 项目后期增加功能服务,客户呢又没有多余的钱给你扩容内存。服务运行几天后就会占满所有内存导致卡顿,怎么办?扩容不行那就每天定时重启服务来续命。

目录

一、执行内容:

二、脚本编写:

三、赋权:

 四、经典报错:

五、解决思路:


一、执行内容:

  1. 关闭服务:sh rsbc.sh stop

  2. 删除旧资源:rm -rf resources/

  3. 拷贝备份资源:cp -r resourcesBackup/ resources/

  4. 启动服务:sh rsbc.sh start

这里注意一下本身我的大华服务通过 /home/**/dhsdk/rsbc.sh 来启动和关闭 

二、脚本编写:

#!/bin/bash

cd /home/***/dhsdk || exit 1

echo "[`date`] 停止服务..."
sh rsbc.sh stop

sleep 3

echo "[`date`] 删除旧资源..."
rm -rf resources/

echo "[`date`] 恢复资源..."
cp -r resourcesBackup/ resources/

sleep 1

echo "[`date`] 启动服务..."
sh rsbc.sh start

echo "[`date`] 重启完成。"

三、赋权:

chmod +x /home/***/restart_dahua.sh
四、设置定时任务:

crontab -e  #开启定时任务

添加例如每天凌晨 3 点执行的计划:

0 3 * * * /home/***/restart_dahua.sh >> /home/***/restart_dahua.log 2>&1
日志会保存在 /home/*****/restart_dahua.log 中,方便你排查问题。

立即测试一下

sh /home/***/restart_dahua.sh

 四、经典报错:

手动执行没问题,crontab 执行就报错

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007fa28f653e3c, pid=51988, tid=0x00007fa27c7e8700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_202-b08) (build 1.8.0_202-b08)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.202-b08 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C  0x00007fa28f653e3c
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# An error report file with more information is saved as:
# /home/**/dhsdk/hs_err_pid51988.log
[thread 140335866881792 also had an error]
pure virtual method called
terminate called without an active exception
tail: startup.log: file truncated
nohup: failed to run command ‘/bin/java’: No such file or directory
 

脚本本身没问题否则上一步的测试也不能通过,这里问题是:定时任务环境变量不完整,尤其找不到 java nohup: failed to run command ‘/bin/java’: No such file or directory

cron 执行脚本时的环境变量是非常精简的,没有 $PATH、没有 $JAVA_HOME

五、解决思路:

restart_dahua.sh 里手动设置 PATH 在 shell 里确认路径:

which java

restart_dahua.sh 脚本开头加入如下两行: export JAVA_HOME=/usr/local/jdk/这里填你的jdk
export PATH=$JAVA_HOME/bin:$PATH

#!/bin/bash

# 设置 Java 环境(适用于 crontab)
export JAVA_HOME=/usr/local/jdk/你的jdk版本
export PATH=$JAVA_HOME/bin:$PATH

cd /home/***/dhsdk || exit 1

echo "[`date`] 停止服务..."
sh rsbc.sh stop

sleep 3

echo "[`date`] 删除旧资源..."
rm -rf resources/

if [ ! -d "resourcesBackup" ]; then
  echo "[`date`] 资源备份目录不存在,终止操作。"
  exit 1
fi

echo "[`date`] 恢复资源..."
cp -r resourcesBackup/ resources/

sleep 1

echo "[`date`] 启动服务..."
sh rsbc.sh start

echo "[`date`] 重启完成。"

检查日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

童龙辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值