发表于: 2021-04-20 23:49:29
2 1256
今天完成的事情:
再安装一台tomcat
编写tomcat脚本
nginx脚本使用
打包代码到服务器上运行
明天计划的事情:
解决服务运行报错问题
遇到的问题:
以下
收获:
安装tomcat2,就按照之前的方法安装。
下面说几个注意的点:
tomcat既可以通过 ./startup.sh 启动,也可以通过 catalina.sh run启动。实际上startup.sh的启动也是调用的catalina.sh,然后去启动的,所以我们需要关注的就是catalina.sh文件。想到之前tomcat调优的时候,也是在catalina.sh中添加调优文件。
1.tomcat启动的时候是找到它的根目录启动的,所以需要在环境变量中进行配置,将两台tomcat的根目录区分开来
# 创建 TOMCAT_HOME 环境变量, 指向 Tomcat根目录-第一个tomcat
export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-9.0.44
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-9.0.44
export TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-9.0.44
# 创建 TOMCAT_HOME 环境变量, 指向 Tomcat 根目录-第二个tomcat
export CATALINA_2_BASE=/usr/tomcat2/apache-tomcat-9.0.44
export CATALINA_2_HOME=/usr/tomcat2/apache-tomcat-9.0.44
export TOMCAT_2_HOME=/usr/tomcat2/apache-tomcat-9.0.44
2.下面就需要配置tomcat当中端口(需要让每台tomcat端口都不一样,不然会发生冲突,报错),注:修改端口后需要在阿里云安全组中添加设置的端口:
http访问端口(默认为8080端口):
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
监听tomcat关闭的端口(默认为8005):
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
负责接收其他http服务器的请求端口(默认为8009):
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
负责接收其他http服务器的请求端口,一开始看到这个,我还以为是和RMI远程调用类似的,为了解决远程方法调用的东西,后来了解了一下,大概是Apache服务器的专属,AJP/1.3是一个二进制的TCP传输协议,相比HTTP效率和性能更高,但是目前nginx没这个模块,所以tomcat的配置大部分都是关闭AJP协议端口的。
参考网址:
===========
===========
编写tomcat脚本
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
cd $DIR
# 先判断需要用到的环境变量是否存在
if [ "${TOMCAT_2_HOME}" = "" ] ; then
# 需要先配置 TOMCAT_HOME 和 TOMCAT_PORT 环境变量
# export TOMCAT_2_HOME=Tomcat安装根目录
# export CATALINA_2_HOME=安装根目录
echo "TOMCAT_2_HOME environment variable not exists!"
echo
else
# 获取命令的第2个参数(第一个参数 $0 是命令自己本身)
OPERATOR="$1"
# 进入到 Tomcat 的命令目录
cd "${TOMCAT_2_HOME}/bin"
#
# 下面开始根据不同的参数执行相应的命令
#
if [ "${OPERATOR}" = "start" ] ; then
# 执行启动命令
./startup.sh
elif [ "${OPERATOR}" = "restart" ] ; then
# 执行重启命令(先停止, 再启动)
./shutdown.sh
./startup.sh
elif [ "${OPERATOR}" = "stop" ] ; then
# 执行停止命令
./shutdown.sh
elif [ "${OPERATOR}" = "status" ] ; then
# 输出监听状态, 主要是看是否有在监听 Tomcat 端口
netstat -npl | grep ":${TOMCAT_PORT}"
else
# 没有符合的参数, 输出命令格式说明
echo "Usage: tomcat2 <start|restart|stop|status>"
echo
fi
fi
注意这个需要放到/usr/local/bin/路径下才能起作用,之前放到/usr/local/tomcat/apache-tomcat-9.0.44/bin tomcat路径下一直没用
==========
==========
nginx脚本使用:
一开始使用nginx官方脚本,由于不太能理解脚本的内容,报错,路径不对,使用前已经修改成自己的路径,又改了改,还是依旧报错,最后使用了一个简易脚本。
nginx官方脚本:
#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15# description: NGINX is an HTTP(S) server, HTTP(S) reverse \# proxy and IMAP/POP3 proxy server# processname: nginx# config: /etc/nginx/nginx.conf# config: /etc/sysconfig/nginx# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -n "$user" ]; then
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
fi}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $prog -HUP
retval=$?
echo}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE}
rh_status() {
status $prog}
rh_status_q() {
rh_status >/dev/null 2>&1}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2esac
简易脚本:
!/bin/sh
daemon=/usr/local/nginx/sbin/nginx
pid=/usr/local/nginx/logs/nginx.pid
start(){
if [ -f $pid ];then
echo "nginx is starting..."
else
$daemon
fi
}
stop(){
if [ -! -f $pid ];then
echo "nginx is stop"
else
$daemon -s stop && echo "stop success"
fi
}
reload(){
if [ -! -f $pid ];then
echo "nginx is stop"
else
$daemon -s reload && echo "reload success"
fi
}
status(){
if [ -f $pid ];then
echo "服务正在运行..."
else
echo "服务已经关闭"
fi
}
case $1 in
status)
status;;
start)
start;;
stop)
stop;;
reload)
reload;;
restart)
stop
sleep 1
start;;
*)
echo "Usage:service nginx {status|stop|start|restart|reload}"
esac
注意:需要进行提权操作,脚本才能顺利运行# chmod a+x /etc/init.d/nginx 解释:a+x==>all user can execute 所有用户可执行)的意思
============
============
在服务器上运行,先说一下思路
1.先开启redis缓存
2.配置nginx.conf,一个指向serviceA,一个指向serviceB. serviceA,serviceB设置的ip是服务器的ip.先启动两台tomcat,然后java -jar serviceA.jar & (目的是:ctrl+c退出后,serviceA仍可以继续运行)
3.启动nginx,在浏览器输入ip+端口号,看tomcat是否可以成功访问
也可以成功访问,但是输入密码,连接serviceA或者serviceB ,报错
===========
===========
截图:
2021-04-20 18:25:34 CST ERROR com.kbk.AOP.MyAspectJ62getControllerLog - 错误信息:Lookup of RMI stub failed; nested exception is java.rmi.ConnectException: Connection refused to host: 8.129.226.29; nested exception is:
java.net.ConnectException: Connection timed out (Connection timed out)
==============
根据这个报错信息判断,
1.serviceA或者serviceB运行失败,找不到bean.但serviceA或者serviceB都运行成功,划掉
2.客户端无法连接到服务端,是否是防火墙影响到了服务端的端口问题,防火墙关闭状态。
3.是否要将ip设置成本地ip 127.0.0.1
4.
测试一下:
在LINUX系统下运行JAR包的命令如下
1、java -jar xxxxx.jar // 当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
2、java -jar xxxxx.jar & //当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。
3、nohup java -jar xxxxxx.jar & //意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
4、nohup java -jar xxxxxx.jar >aa.log //指定输出日志文件,意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
=========
=========
下面记录linux常用命令:
mv 文件 文件夹 移动文件
netstat -atunp 查看正在使用的端口(非常好用)
ps -aux|grep xxx 查看项目是否运行
....
评论