2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
अफलाइन-वातावरणे नियोजितैः बहुभिः जावा-अनुप्रयोगैः निर्मितं प्रणालीं परीक्षण-चरणस्य समये अधिकवारं विमोचनस्य आवश्यकता वर्तते, संसाधन-बाधायाः कारणात्, तत्र devops अथवा CICD सेट् नास्ति, अतः केवलं विमोचनार्थं जार-मध्ये संकुलं भवति मया पूर्वं आरम्भार्थं स्क्रिप्ट् उपयुज्यते स्म, अन्यथा प्राप्तस्य पोर्ट् इत्यस्य अनुसारं प्रक्रियां मारयितुं आवश्यकं भवति, अन्यथा पोर्ट् विग्रहः भविष्यति तथा च स्टार्टअपः विफलः भविष्यति इति अनुकूलनबिन्दुषु एकः स्क्रिप्ट् इत्यस्य स्वचालितपुनः आरम्भस्य समर्थनं कर्तुं शक्यते । स्वयमेव तत्सम्बद्धं प्रक्रियां अन्वेष्टुम् ततः मारयित्वा पुनः आरभत . अन्यः बिन्दुः अस्ति लॉग सञ्चिका पुनः आरम्भस्य अनन्तरं सेवानाम वर्तमानसमयस्य च आधारेण नूतना लॉग सञ्चिका उत्पद्यते, यदि बहुविधाः उपसर्गयुक्ताः सञ्चिकाः सन्ति, तर्हि भवद्भिः तान् हस्तचलितरूपेण चयनं कर्तव्यम् .
प्रथमं अहं वक्तुम् इच्छामि यत् अहं शेल्-नवीनः अस्मि, अस्य क्षेत्रस्य अल्पः उपयोगः अपि अस्ति ।
अहम् अस्य कृते lsof आदेशस्य उपयोगं कर्तुं रोचये यथा, पोर्ट् 8080 द्वारा आक्रान्ताः प्रक्रियाः पृच्छितुं, भवान् निम्नलिखित आदेशस्य उपयोगं कर्तुं शक्नोति
lsof -i:8080
भवद्भिः सर्वैः एतत् ज्ञातव्यं, kill -9, केवलं kill इत्यस्य उपयोगं न कुर्वन्तु, उदाहरणार्थं, प्रक्रियां PID 12345 इत्यनेन मारयन्तु ।
kill -9 12345
एषः तुल्यकालिकः सरलः आदेशः अस्ति, तदनुसारं फंक्शन् इत्यस्य पैरामीटर्स् इत्यस्य उपयोगः भवति ।$1
,$2
,$3
...प्राप्तुं
यतो हि बहुविधाः जावासेवाः सन्ति, पुनः उपयोगस्य विचारस्य अपि अनुसरणं कृत्वा, अहं सेवां पुनः आरभ्य एकां सामान्यपद्धतिं लिखितुं चिन्तितवान्, ततः बहुसेवानां अनुरूपं स्क्रिप्ट् लिखित्वा तेषां स्वस्वसेवानामानि, पोर्ट्-आदी-सूचनाः च अभिलेखयितुम् सेवानां तत्तत्स्क्रिप्ट्-मध्ये middle pass पैरामीटर् सामान्यसेवा-प्रारम्भ-अथवा पुनः आरम्भ-विधिं आह्वयति ।
सामान्यसेवाप्रारम्भः अथवा पुनः आरम्भः स्क्रिप्ट् run.sh
#!/bin/bash
start_app(){
# 接收参数
APP_NAME=$1;
APP_PORT=$2;
MEM=$3
ACTION=$4;
CURRENT_TIME=`date +"%Y%m%d%H%M%S"`
#检查程序是否在运行
APP_STATUS=`netstat -nlt|grep ${APP_PORT} |wc -l`;
RUNNING_PID=$(netstat -nlp | grep :$APP_PORT | awk '{print $7}' | awk -F"/" '{ print $1 }');
LOG_FILE=./logs/${APP_NAME}_${CURRENT_TIME}.log;
cd ..;
if [ "${APP_STATUS}" -eq 1 ]; then
if [ "${ACTION}"x == "restart"x ]; then
## 重启前先kill原进程
echo "kill the running app whose PID is ${RUNNING_PID} of ${APP_NAME}";
kill -9 "${RUNNING_PID}";
# 日志归档
cd logs;
for file in `ls ${APP_NAME}* -a`;
do
mv "${file}" backup/;
done
cd ..;
else
echo "exist running ${APP_NAME} and the PID is ${RUNNING_PID}";
exit 0;
fi
fi
echo "start ${APP_NAME} at $CURRENT_TIME";
## 启动程序
nohup java -Xms${MEM}m -Xmx${MEM}m -XX:PermSize=256m -XX:MaxPermSize=512m -jar -Dfile.encoding=utf-8 -Dserver.port=${APP_PORT} -Dspring.profiles.active=prod ${APP_NAME} > ${LOG_FILE} 2>&1 &
pid=`ps -ef|grep java|grep ${APP_NAME}`
echo "${APP_NAME} has started successfully at ${CURRENT_TIME},and the pid is ${pid}"
}
एकलसेवाप्रारम्भस्क्रिप्ट्
#!/bin/bash
action=$1
## 引入通用服务启动脚本
source ./run.sh
#启动方法
start(){
# 执行通用服务脚本中的启动方法
start_app xxx.jar 8080 4096 ${action}
}
#程序主入口
start
यदि सेवाप्रारम्भस्क्रिप्ट् प्रत्यक्षतया मापदण्डं विना निष्पादितं भवति तर्हि सेवा पोर्ट् कब्जितः अस्ति वा इति निर्णयः भविष्यति यदि पुनः आरम्भः पारितः भवति तर्हि मूलसेवाप्रक्रिया मारिता भविष्यति ततः पुनः आरभ्यते यदा सेवा आरब्धा भवति।
jar संकुलं /opt/app निर्देशिकायां स्थितम् अस्ति, स्क्रिप्ट् /opt/app/run निर्देशिकायां स्थितम् अस्ति, तथा च लॉगः /opt/app/logs निर्देशिकायां स्थापितः अस्ति सम्प्रति, एतत् संस्करणं केवलं निष्पादनस्य समर्थनं कर्तुं शक्नोति स्क्रिप्ट् इत्यस्य वर्तमाननिर्देशिकायां यदि निरपेक्षमार्गः उपयुज्यते तर्हि विधिः त्रुटिं निवेदयिष्यति, यत् स्क्रिप्ट् मध्ये केषाञ्चन लेखनविधिनां कारणं भवितुम् अर्हति यत् एब्सोल्यूट् मार्गाः न उपयुज्यन्ते, अतः वयं एतत् स्थापयिष्यामः समाधानम् अधुना कृते।
परीक्षणकाले सम्मुखीभवतिrun.sh: xxx行 $'r' 附近有语法错误
त्रुटिः, तत् परिवर्तयितुं sed -i 's/r$//' run.sh आदेशस्य उपयोगं कुर्वन्तु ।