十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
一、创建linux维护用户
成都创新互联公司主营市北网站建设的网络公司,主营网站建设方案,成都app开发,市北h5成都小程序开发搭建,市北网站营销推广欢迎市北等地区企业咨询
登录root用户
创建新用户
useradd 新用户名
设置用户密码
passwd 新用户密码
二、安装jdk和配置环境变量
建议在root用户下直接安装jdk,并直接配置环境变量,同时给非root用户设置读和执行权限
解压包
tar xvf jdk包名.tar
配置全局变量
编辑/etc/profile文件
vi /etc/profile
按I键,切换成编辑模式。
在文件未加入一下配置
export JAVA_HOME=jdk的解压文件目录
export JRE_HOME=jdk的解压文件目录/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${ JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${ JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
保存并退出
Esc
:wq
重载配置文件使其生效
source /etc/profile
检查是否安装成功
Javac
Java version
权限修改
读4写2执行1,顺序所有者、组成员、其他用户
Chomd 755 jdk的解压文件目录
三、安装tomcat
安装tomcat和放入war包使用非root的维护用户
如果使用root安装的话记得设置权限。( chomd -r 外层文件目录 )
su - 用户名
1、解压包
tar xvf tomcat包名.tar
2、将war包放入tomcat/webapps目录下
3、Tomcat启动服务和停止服务
查看进程
ps -ef | grep java
启动应用
Tomcat bin目录下.startup.sh
停止应用
建议使用
Kill -9 进程号
注:解压出应用文件后,注意配置信息的修改
四、IBM MQ部署 (7.5之后的版本)
(以下是使用9.0版本的正确部署命令)
一、 卸载旧版本IBM MQ (可选)
因为部署环境没有安装过mq,卸载这部分命令我没有亲自测试过
设置环境
以用户身份登录到组mqm,找到mq的安装位置 /opt/mqm
source ./setmqenv -s
查看队列管理器的状态
dspmq -o installation
停止与要卸载的安装关联的所有正在运行的队列管理器
endmqm SXRECV
停止与队列管理器关联的所有侦听器。
endmqlsr -m SXRECV
查看系统上当前安装的软件包(组件)
sudo rpm -qa | grep MQSeries
列出软件包并一次性卸载
sudo rpm -qa | grep MQSeries | xargs rpm -ev
再将对应的用户及安装目录给删除
rm -rf /opt/mqm
userdel -r mqm
检查MQ license
license文件在安装目录中 /opt/mqm/lib 可以找到
amqtcert.lic - is a trial license
amqbcert.lic - is a beta license
amqpcert.lic - is the production license
——————————————————————————————————————
二、安装新版本ibm mq
解压,解压文件都在MQServer中
tar –xzvf IBM_MQ_9.1.5_LINUX_X86-64.tar.gz
进入MQServer文件夹中:
cd MQServer/
运行MQ许可证程序
./mqlicense.sh
安装WebSphere MQ for Linux服务器(Runtime、SDK 和 Server 软件包):
rpm -U MQSeriesRuntime-9.1.5-0.x86_64.rpm
rpm -U MQSeriesSDK-9.1.5-0.x86_64.rpm
rpm -U MQSeriesServer-9.1.5-0.x86_64.rpm
安装WebSphere MQ for Linux客户机:
rpm -U MQSeriesClient-9.0.0-0.x86_64.rpm
安装WebSphere MQ样本程序:
rpm -U MQSeriesSamples-9.0.0-0.x86_64.rpm
创建组和用户
安装过程创建了一个名为mqm的用户和一个同样名为 mqm 的组。设置一个密码来解锁。
passwd mqm
——————————————————————————————————————
三、 配置
(这部分队列管理器、通道、队列等根据实际情况自行配置)
切换用户:
su mqm
创建队列管理器
使用crtmqm命令来创建一个名为 SXRECV
的队列管理器。我们把它作为缺省队列,并且将不在创建时指定死信队列。然后使用strmqm命令启动队列管理器。
crtmqm -q SXRECV
strmqm SXRECV
——————
如果执行crtmqm命令时提示
-bash-3.2$ crtmqm
-bash: crtmqm: command not found
find / -name crtmqm
则需要配置mqm用户的环境变量,编辑如下文件,并添加下面的内容,如下:
第一种方法:相对第二种较安全仅对mqm用户有效
方法一:
(1) -bash-3.2$ vi /var/mqm/.bash_profile --有可能会在文件夹下看不到这个文件,通过编辑即可看到
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
(2)执行“.”命令,使这个文件生效
-bash-3.2$ source .bash_profile
(3)再次尝试实行crtmqm或是dspmqm命令,即可发现已经生效。
方法二:
( 1)
su root
[if !supportLists](2)[endif]
vim /etc/profile
[if !supportLists](3)[endif] 在最后面加上:
PATH=$PATH:/opt/mqm/samp/bin:/opt/mqm/bin:bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/bin
( 4)关闭远程终端重新打开,无需重启服务器
——————
运行队列管理器
runmqsc SXRECV
创建通道和队列
DEFINE QLOCAL (XYDATA) REPLACE USAGE (NORMAL) DEFPSIST (YES) MAXDEPTH (300000) DESCR('兴业银行')
DEFINE QLOCAL (XYTRANS) REPLACE USAGE (XMITQ) DEFPSIST (YES) MAXDEPTH (300000) DESCR('兴业银行')
DEFINE QREMOTE (XYACK) REPLACE DEFPSIST (YES) RQMNAME (SXSEND) RNAME (XYACK) XMITQ (XYTRANS) DESCR('XXXX')
DEFINE CHANNEL (XYDATA) CHLTYPE (RCVR) TRPTYPE (TCP) REPLACE DESCR('XXXX')
DEFINE CHANNEL (XYACK) CHLTYPE (SDR) CONNAME ('166.1.1.8(2214)') XMITQ (XYTRANS) TRPTYPE (TCP) DISCINT (0) CONVERT (NO) SHORTRTY (30) SHORTTMR (10) LONGRTY (999999999) LONGTMR (20) REPLACE DESCR('XXXX')
DEFINE CHANNEL (SVRCONN) CHLTYPE (SVRCONN) MCAUSER('mqm')
创建监听
DEFINE LISTENER (RECLISTENER) TRPTYPE (TCP) CONTROL(QMGR) PORT (2214)
启动监听
start LISTENER(RECLISTENER)
启动通道
start channel(SVRCONN)
start channel(XYDATA)
start channel(XYACK)
———————————————————————————————————————————————————
四、2035错误码 说明
如果程序连接mq报错2035,则需要对权限认证做设置,则进行以此操作
1、
ALTER QMGR CHLAUTH(DISABLED)
2、
ALTER CHL(通道名) CHLTYPE(SVRCONN) MCAUSER('mqm')
3、
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
或者直接将连接认证选项置为空,将其完全关闭,指令如下:
ALTER QMGR CONNAUTH('')
在执行完上述两条命令中的任一条后,都需要刷新连接认证的缓存,指令如下:
REFRESH SECURITY TYPE(CONNAUTH)
五、mq操作命令
一、MQ的启动与停止
1、MQ的启动
strmqm QMgrName
如果启动默认队列管理器,strmqm后可以忽略队列管理器名称。
2、MQ的关闭
endmqm -i QMgrName
停止mq
二、MQ运行状态查看与常用操作
1、 查看队列管理器运行状态
su mqm
执行如下命令检查队列管理器运行状态:dspmq显示结果中QMNAME表示MQ队列管理器的名称,STATUS表示当前运行状态。运行状态有如下几种:Starting正在启动Running正在运行Ending正在停止Ended normally已经正常终止Ended immediately已经立即终止Ended preemtively已经强制终止Ended unexpectively异常终止
注意:停止MQ后必须使用dspmq命令进行状态检查
2、查看通道运行状态与启停通道
runmqsc
dis chl(*);查看所有通道定义
dis chs(*);查看所有通道状态,如果没有查询到通道状态,或报错AMQ8420: Channel Status not found,请启动通道
dis chs(ChannelName); 查看通道ChannelName的状态
通道状态有如下几种:
STARTING正在启动BINDING正在绑定INITIALIZING正在初始化RUNNING正常STOPPING 正在停止RETRYING重试PAUSED等待STOPPED已停止REQUESTING请求
start chl(ChannelName);启动通道
stop chl(ChannelName);停止通道
* 重置通道
reset channel(ChannelName); 重置通道序号。当本地与其他MQ队列管理器的通道无法正常启动的情况,检查日志发现是通道序号不一致,此时就需要先停止发送方通道,清空队列深度并在发送方和接收方进行通道计数的重置,重置后启动通道即可恢复通讯。
注意:重置成功mq序列号一般相同或相差1
3、查看通道监听状态与启停监听
runmqsc
dis listner(*);查看通道监听定义
dis lsstatu(listnerName);查看监听状态
start lstr(listnerName); 启动监听
stop lstr(listnerName); 停止监听
4、查看队列深度
runmqsc
dis q(*);查看所有各类队列的属性
dis qlocal(QName);查看所有本地队列的属性
队列深度属性为:CURDEPTH
查看队列深度display ql('队列名') curdepth
*清空队列深度
清空队列深度
clear ql(‘队列名’)
三、MQ发送和接收消息
su mqm
发送消息
amqsput 队列名 队列管理器
获取消息
amqsget 队列名 队列管理器
可通过配合查看队列深度命令,完成mq的联调
六、其他维护中常用linux命令
1、测试端口连接
telnet ip port
2、查看已启动的端口
netstat -an | grep 端口号
3、查看应用进程
ps -ef |grep java
4、修改权限
chomd XXX(对应的权限) 文件目录
5、修改文件或目录下所有文件所有者和组
Chomd -R 用户名:组名 文件目录
6、查看目录内容
ls 或者ls -l (简写ll)
7、查看文件输出
cat 目录/文件名
或者
Vi 目录/文件名 按i可进入编辑
按 G 到文档末尾
按 gg 到文件首行
不保存退出
Esc :q!
保存退出
Esc :wq
vi 进入文档文档后查找关键字
Esc 进入命令行
/关键字
按n向下继续查找
按N向上继续查找
8、杀进程
Kill -9 进程号
9、复制
cp -r 源目录 目标目录
10、移动
mv -i 源文件或目录 目标文件或目录
11、删除
rm -R 文件目录
12、 切换工作目录
cd 相对路径或绝对路径
~也表示为 home 目录 的意思, . 则是表示目前所在的目录, .. 则表示目前目录位置的上一层目录。
1、下载资源和代码;
2、编译;
3、将需要打包的文件复制到临时目录打包。
后来由于新需求,修改了一下功能,在复制到临时目录之前还有回去一些资源到临时目录:
2.5、下载三方资源到临时目录。
增加此功能后错误就出现了,复制的临时目录的结构全乱了,比如:
java/bin应复制到temp/bin,结果去错误的复制到了temp/bin/bin。
看到此问题我以为是2.5步骤中下载的资源包目录有问题,将功能运行到2.5步停止查看目录无问题,保留第3步把2.5删除也无问题,唯独这些一起运行就有问题,而且windows系统下没问题,Linux却有问题。
后来一位前辈想到了问题的原因,linux系统下面调用了cp命令来复制文件和文件夹,问题就出在这里。
调用的命令 cp -arf srcdir destdir
-a是要复制链接文件,有些生僻,-r递归-f强制较常见。
从srcdir到destdir有讲究。举例子来说:
cp -arf java/bin temp/bin 有两种情况的复制:
a.复制前 若temp/bin不存在,则将java/bin直接复制到temp,即temp/bin就是java/bin;
b.复制前 若temp/bin存在,则将java/bin复制到temp/bin/中,即temp/bin/bin才是java/bin。
之前没有2.5步temp下的bin不存在所以不会有问题,加入2.5步使得bin目录存在了所以导致复制出错。
解决方式是这样复制
cp -arf java/bin temp/
这样不论怎样都会正确,注意temp后一定要加/。
另外,windows下使用的是xcopy命令,不会有这样的问题。
原因是CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。\x0d\x0a//查看SELinux设置\x0d\x0a# getsebool -a|grep ftp\x0d\x0aftpd_disable_trans -- off\x0d\x0a或者\x0d\x0aftp_home_dir--off\x0d\x0a//使用setsebool命令开启\x0d\x0a# setsebool ftpd_disable_trans 1\x0d\x0a或者\x0d\x0a# setsebool ftp_home_dir 1\x0d\x0a//查看当前状态是否是on的状态\x0d\x0a# getsebool -a|grep ftp\x0d\x0aftpd_disable_trans -- on\x0d\x0a或者\x0d\x0aftp_home_dir--on\x0d\x0a//setsebool使用-P参数,无需每次开机都输入这个命令\x0d\x0a# setsebool -P ftpd_disable_trans 1\x0d\x0a或者\x0d\x0a# setsebool -P ftp_home_dir 1\x0d\x0a# service vsftpd restart
linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错
首先是我把套接字设置为异步的了,然后在使用write发送数据时采取的方式是循环发送大量的数据;由于是异步的,write\send将要发送的数据提交到发送缓冲区后是立即返回的,并不需要对端确认数据已接收。在这种情况下是很有可能出现发送缓冲区被填满,导致write\send无法再向缓冲区提交要发送的数据。因此就产生了Resource temporarily unavailable的错误,EAGAIN 的意思也很明显,就是要你再次尝试。
从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞起来等待数据准备就绪返回,read函数会返回一个错误EAGAIN,提示你的应用程序现在没有数据可读请稍后再试。
又例如,当一个系统调用(比如fork)因为没有足够的资源(比如虚拟内存)而执行失败,返回EAGAIN提示其再调用一次(也许下次就能成功)。
Linux - 非阻塞socket编程处理EAGAIN错误
在linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno代码为11(EAGAIN),这是什么意思?
这表明你在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。对非阻塞socket而言,EAGAIN不是一种错误。在VxWorks和Windows上,EAGAIN的名字叫做EWOULDBLOCK。
另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。
最后,如果recv的返回值为0,那表明连接已经断开,我们的接收操作也应该结束。
iReadSizeOnce=read(iOpenCom,RxBuf+iReadSize,1024);
if (iReadSizeOnce != ZERO)
{
if (iReadSizeOnce != EAGAIN)
{
continue;
}
else
{
//stCComApiLog.LogError("读串口操作错误");
return(FUN_ERROR);
}
}
需要解决更多linux问题,详情请看
望采纳
以下内容是基于 linux4.7 版本
1-34 错误码在 asm-generic/errno-base.h 中定义
35-133 错误码在 asm-generic/errno.h 中定义
有可能是硬盘有问题了,检查下硬盘线、更改下BIOS中的硬盘模式、重新格式化下硬盘,如果不行用厂家的硬盘测试软件检测一下,有坏道低格,再不成只能换硬盘了。