服务器信息:操作系统:CentOS Linux 版本 7 (Core)
前言:我们开发人员经常会遇到 项目后期增加功能服务,客户呢又没有多余的钱给你扩容内存。服务运行几天后就会占满所有内存导致卡顿,怎么办?扩容不行那就每天定时重启服务来续命。
目录
一、执行内容:
-
关闭服务:
sh rsbc.sh stop -
删除旧资源:
rm -rf resources/ -
拷贝备份资源:
cp -r resourcesBackup/ resources/ -
启动服务:
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`] 重启完成。"

检查日志

2万+

被折叠的 条评论
为什么被折叠?



