centos ds命令,centos7重启命令

其实centos ds命令的问题并不复杂,但是又很多的朋友都不太了解centos7重启命令,因此呢,今天小编就来为大家分享centos ds命令的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

CentOS下共享内存使用的常见陷阱详解

所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。其他进程能把同一段共享内存段“连接到”他们自己的地址空间里去。所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。共享内存的使用大大降低了在大规模数据处理过程中内存的消耗,但是共享内存的使用中有很多的陷阱,一不注意就很容易导致程序崩溃。

超过共享内存的大小限制?

在一个linux服务器上,共享内存的总体大小是有限制的,这个大小通过SHMMAX参数来定义(以字节为单位),您可以通过执行以下命令来确定 SHMMAX的值:

# cat/proc/sys/kernel/shmmax

如果机器上创建的共享内存的总共大小超出了这个限制,在程序中使用标准错误perror可能会出现以下的信息:

unable to attach to shared memory

解决方法:

1、设置 SHMMAX

SHMMAX的默认值是 32MB。一般使用下列方法之一种将 SHMMAX参数设为 2GB:

通过直接更改/proc文件系统,你不需重新启动机器就可以改变 SHMMAX的默认设置。我使用的方法是将以下命令放入/>etc/rc.local启动文件中:

# echo"2147483648">/proc/sys/kernel/shmmax

您还可以使用 sysctl命令来更改 SHMMAX的值:

# sysctl-w kernel.shmmax=2147483648

最后,通过将该内核参数插入到/etc/sysctl.conf启动文件中,您可以使这种更改永久有效:

# echo"kernel.shmmax=2147483648">>/etc/sysctl.conf

2、设置 SHMMNI

我们现在来看 SHMMNI参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096。这一数值已经足够,通常不需要更改。

您可以通过执行以下命令来确定 SHMMNI的值:

# cat/proc/sys/kernel/shmmni

4096

3、设置 SHMALL

最后,我们来看 SHMALL共享内存内核参数。该参数控制着系统一次可以使用的共享内存总量(以页为单位)。简言之,该参数的值始终应该至少为:

ceil(SHMMAX/PAGE_SIZE)

SHMALL的默认大小为 2097152,可以使用以下命令进行查询:

# cat/proc/sys/kernel/shmall

2097152

SHMALL的默认设置对于我们来说应该足够使用。

注意:在 i386平台上 Red Hat Linux的页面大小为 4096字节。但是,您可以使用 bigpages,它支持配置更大的内存页面尺寸。

多次进行shmat会出现什么问题?

当首次创建共享内存段时,它并不能被任何进程所访问。为了使共享内存区可以被访问,则必须通过 shmat函数将其附加( attach)到自己的进程空间中,这样进程就与共享内存建立了连接。该函数声明在 linux/shm.h中:

#include

#include

void*shmat(int shmid, const void*shmaddr, int shmflg);

参数 shmid是 shmget()的返回值,是个标识符;

参数 shmflg是存取权限标志;如果为 0,则不设置任何限制权限。在中定义了几个权限:

#define SHM_RDONLY 010000/* attach read-only else read-write*/

#define SHM_RND 020000/* round attach address to SHMLBA*/

#define SHM_REMAP 040000/* take-over region on attach*/

如果指定 SHM_RDONLY,那么共享内存区只有读取权限。

参数 shmaddr是共享内存的附加点,不同的取值有不同的含义:

?如果为空,则由内核选择一个空闲的内存区;如果非空,返回地址取决于调用者是否给 shmflg参数指定 SHM_RND值,如果没有指定,则共享内存区附加到由 shmaddr指定的地址;否则附加地址为 shmaddr向下舍入一个共享内存低端边界地址后的地址(SHMLBA,一个常址)。

Ø通常将参数 shmaddr设置为 NULL。

shmat()调用成功后返回一个指向共享内存区的指针,使用该指针就可以访问共享内存区了,如果失败则返回-1。

其映射关系如下图所示:

图1.1共享内存映射图

其中,shmaddr表示的是物理内存空间映射到进程的虚拟内存空间时候,虚拟内存空间中该块内存的起始地址,在使用中,因为我们一般不清楚进程中哪些地址没有被占用,所以不好指定物理空间的内存要映射到本进程的虚拟内存地址,一般会让内核自己指定:

void ptr= shmat(shmid, NULL,0);

这样挂载一个共享内存如果是一次调用是没有问题的,但是一个进程是可以对同一个共享内存多次 shmat进行挂载的,物理内存是指向同一块,如果shmaddr为NULL,则每次返回的线性地址空间都不同。而且指向这块共享内存的引用计数会增加。也就是进程多块线性空间会指向同一块物理地址。这样,如果之前挂载过这块共享内存的进程的线性地址没有被shmdt掉,即申请的线性地址都没有释放,就会一直消耗进程的虚拟内存空间,很有可能会最后导致进程线性空间被使用完而导致下次shmat或者其他操作失败。

解决方法:

可以通过判断需要申请的共享内存指针是否为空来标识是否是第一次挂载共享内存,若是则使用进行挂载,若不是则退出。

void* ptr= NULL;

...

if(NULL!= ptr)

return;

ptr= shmat(shmid,ptr,0666);

附:

函数shmat将标识号为shmid共享内存映射到调用进程的地址空间中,映射的地址由参数shmaddr和shmflg共同确定,其准则为:

(1)如果参数shmaddr取值为NULL,系统将自动确定共享内存链接到进程空间的首地址。

(2)如果参数shmaddr取值不为NULL且参数shmflg没有指定SHM_RND标志,系统将运用地址shmaddr链接共享内存。

(3)如果参数shmaddr取值不为NULL且参数shmflg指定了SHM_RND标志位,系统将地址shmaddr对齐后链接共享内存。其中选项SHM_RND的意思是取整对齐,常数SHMLBA代表了低边界地址的倍数,公式“shmaddr–(shmaddr% SHMLBA)”的意思是将地址shmaddr移动到低边界地址的整数倍上。

Shmget创建共享内存,当key相同时,什么情况下会出错?

shmget()用来创建一个共享内存区,或者访问一个已存在的共享内存区。该函数定义在头文件 linux/shm.h中,原型如下:

#include

#include

int shmget(key_t key, size_t size, int shmflg);

参数 key是由 ftok()得到的键值;

参数 size是以字节为单位指定内存的大小;

参数 shmflg是操作标志位,它的一些宏定义如下:

IPC_CREATE:调用 shmget时,系统将此值与其他共享内存区的 key进行比较,如果存在相同的 key,说明共享内存区已存在,此时返回该共享内存区的标识符,否则新建一个共享内存区并返回其标识符。

IPC_EXCL:该宏必须和 IPC_CREATE一起使用,否则没意义。当 shmflg取 IPC_CREATE| IPC_EXCL时,表示如果发现内存区已经存在则返回-1,错误代码为 EEXIST。

注意,当创建一个新的共享内存区时,size的值必须大于 0;如果是访问一个已经存在的内存共享区,则置 size为 0。

一般我们创建共享内存的时候会在一个进程中使用shmget来创建共享内存,

Int shmid= shmget(key, size, IPC_CREATE|0666);

而在另外的进程中,使用shmget和同样的key来获取到这个已经创建了的共享内存,

Int shmid= shmget(key, size, IPC_CREATE|0666);

如果创建进程和挂接进程key相同,而对应的size大小不同,是否会shmget失败?

Ø已经创建的共享内存的大小是可以调整的,但是已经创建的共享内存的大小只能调小,不能调大

如:

shm_id= shmget(key,4194304,IPC_CREAT);

创建了一个4M大小的共享内存,如果这个共享内存没有删掉,我们再使用

shm_id= shmget(key,10485760,IPC_CREAT);

来创建一个10M大小的共享内存的时候,使用标准错误输出会有如下错误信息:

shmget error: Invalid argument

但是,如果我们使用:

shm_id= shmget(key,3145728,IPC_CREAT);

来创建一个3M大小的共享内存的时候,并不会输出错误信息,只是共享内存大小会被修改为3145728,这也说明,使用共享内存的时候,是用key来作为共享内存的唯一标识的,共享内存的大小不能区分共享内存。

这样会导致什么问题?

当多个进程都能创建共享内存的时候,如果key出现相同的情况,并且一个进程需要创建的共享内存的大小要比另外一个进程要创建的共享内存小,共享内存大的进程先创建共享内存,共享内存小的进程后创建共享内存,小共享内存的进程就会获取到大的共享内存进程的共享内存,并修改其共享内存的大小和内容(留意下面的评论补充),从而可能导致大的共享内存进程崩溃。

解决方法:

方法一:

在所有的共享内存创建的时候,使用排他性创建,即使用IPC_EXCL标记:

Shmget(key, size,IPC_CREATE|IPC_EXCL);

在共享内存挂接的时候,先使用排他性创建判断共享内存是否已经创建,如果还没创建则进行出错处理,若已经创建,则挂接:

Shmid= Shmget(key, size,IPC_CREATE|IPC_EXCL);

If(-1!= shmid)

{

Printf("error");

}

Shmid= Shmget(key, size,IPC_CREATE);

方法二:

虽然都希望自己的程序能和其他的程序预先约定一个唯一的键值,但实际上并不是总可能的成行的,因为自己的程序无法为一块共享内存选择一个键值。因此,在此把key设为IPC_PRIVATE,这样,操作系统将忽略键,建立一个新的共享内存,指定一个键值,然后返回这块共享内存IPC标识符ID。而将这个新的共享内存的标识符ID告诉其他进程可以在建立共享内存后通过派生子进程,或写入文件或管道来实现,即这种方法不使用key来创建共享内存,由操作系统来保证唯一性。

ftok是否一定会产生唯一的key值?

系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。

ftok原型如下:

key_t ftok( char* pathname, int proj_id)

pathname就时你指定的文件名,proj_id是子序号。

在一般的UNIX实现中,是将文件的索引节点号取出,前面加上子序号得到key_t的返回值。如指定文件的索引节点号为65538,换算成16进制为0×010002,而你指定的proj_id值为38,换算成16进制为0×26,则最后的key_t返回值为0×26010002。

查询文件索引节点号的方法是: ls-i

但当删除重建文件后,索引节点号由操作系统根据当时文件系统的使用情况分配,因此与原来不同,所以得到的索引节点号也不同。

根据pathname指定的文件(或目录)名称,以及proj_id参数指定的数字,ftok函数为IPC对象生成一个唯一性的键值。在实际应用中,很容易产生的一个理解是,在proj_id相同的情况下,只要文件(或目录)名称不变,就可以确保ftok返回始终一致的键值。然而,这个理解并非完全正确,有可能给应用开发埋下很隐晦的陷阱。因为ftok的实现存在这样的风险,即在访问同一共享内存的多个进程先后调用ftok函数的时间段中,如果pathname指定的文件(或目录)被删除且重新创建,则文件系统会赋予这个同名文件(或目录)新的i节点信息,于是这些进程所调用的ftok虽然都能正常返回,但得到的键值却并不能保证相同。由此可能造成的后果是,原本这些进程意图访问一个相同的共享内存对象,然而由于它们各自得到的键值不同,实际上进程指向的共享内存不再一致;如果这些共享内存都得到创建,则在整个应用运行的过程中表面上不会报出任何错误,然而通过一个共享内存对象进行数据传输的目的将无法实现。

所以如果要确保key_t值不变,要么确保ftok的文件不被删除,要么不用ftok,指定一个固定的key_t值。

如果存在生成key_t值的文件被删除过,则很有可能自己现在使用的共享内存key_t值会和另外一个进程的key_t值冲突,如下面这种情况:

进程1使用文件1来ftok生成了key10000,进程2使用文件2来ftok生成了key 11111,此时如果进程1和进程2都需要下载文件,并将文件的内容更新到共享内存,此时进程1和2都需要先下文件,再删掉之前的共享内存,再使用ftok生成新的key,再用这个key去申请新的共享内存来装载新的问题,但是可能文件2比较大,下载慢,而文件1比较小,下载比较慢,由于文件1和文件2都被修改,此时文件1所占用的文件节点号可能是文件2之前所占用的,此时如果下载的文件1的ftok生成的key为11111的话,就会和此时还没有是否11111这个key的进程2的共享内存冲突,导致出现问题。

解决方法:

方法一:

在有下载文件操作的程序中,对下载的文件使用ftok获取key的时候,需要进行冲突避免的措施,如使用独占的方式获取共享内存,如果不成功,则对key进行加一操作,再进行获取共享内存,一直到不会产生冲突为止。

方法二:

下载文件之前,将之前的文件进行mv一下,先“占”着这个文件节点号,防止其他共享内存申请key的时候获取到。

另外:

创建进程在通知其他进程挂接的时候,建议不使用ftok方式来获取Key,而使用文件或者进程间通信的方式告知。

共享内存删除的陷阱?

当进程结束使用共享内存区时,要通过函数 shmdt断开与共享内存区的连接。该函数声明在 sys/shm.h中,其原型如下:

#include

#include

int shmdt(const void*shmaddr);

参数 shmaddr是 shmat函数的返回值。

进程脱离共享内存区后,数据结构 shmid_ds中的 shm_nattch就会减 1。但是共享段内存依然存在,只有 shm_attch为 0后,即没有任何进程再使用该共享内存区,共享内存区才在内核中被删除。一般来说,当一个进程终止时,它所附加的共享内存区都会自动脱离。

我们通过:

int shmctl( int shmid, int cmd, struct shmid_ds*buf);

来删除已经存在的共享内存。

第一个参数,shmid,是由shmget所返回的标记符。

第二个参数,cmd,是要执行的动作。他可以有三个值:

命令描述

IPC_STAT设置shmid_ds结构中的数据反射与共享内存相关联的值。

IPC_SET如果进程有相应的权限,将与共享内存相关联的值设置为shmid_ds数据结构中所提供的值。

IPC_RMID删除共享内存段。

第三个参数,buf,是一个指向包含共享内存模式与权限的结构的指针,删除的时候可以默认为0。

如果共享内存已经与所有访问它的进程断开了连接,则调用IPC_RMID子命令后,系统将立即删除共享内存的标识符,并删除该共享内存区,以及所有相关的数据结构;

如果仍有别的进程与该共享内存保持连接,则调用IPC_RMID子命令后,该共享内存并不会被立即从系统中删除,而是被设置为IPC_PRIVATE状态,并被标记为”已被删除”(使用ipcs命令可以看到dest字段);直到已有连接全部断开,该共享内存才会最终从系统中消失。

需要说明的是:一旦通过shmctl对共享内存进行了删除操作,则该共享内存将不能再接受任何新的连接,即使它依然存在于系统中!所以,可以确知,在对共享内存删除之后不可能再有新的连接,则执行删除操作是安全的;否则,在删除操作之后如仍有新的连接发生,则这些连接都将可能失败!

Shmdt和shmctl的区别:

Shmdt是将共享内存从进程空间detach出来,使进程中的shmid无效化,不可以使用。但是保留空间。

而shmctl(sid,IPC_RMID,0)则是删除共享内存,彻底不可用,释放空间。

nfs:server is not responding,still trying的解决办法

系统:centos7.9

nfs版本:nfsstat: 1.3.0

rpcbind版本:rpcbind:0.2.0

查看message日志发现nfs客户连接端报如下错误

问题原因:

Mandag 27 november 2006 20:12 skrev Verner Kjærsgaard:

NFS协议到现在经历了V1、V2、V3、V4四个版本,但是它有一个缺点就是协议没有用户认证机制,而且数据在网络上传送的时候是明文传送,所以安全性极差,一般只能在局域网中使用。

NFSv3是1995年发布的,相比NFSv3,NFSv4发生了比较大的变化,最大的变化是NFSv4有状态了。NFSv2和NFSv3都是无状态协议,服务端不需要维护客户端的状态信息。无状态协议的一个优点在于灾难恢复,当服务器出现问题后,客户端只需要重复发送失败请求就可以了,直到收到服务端的响应信息。但是某些操作必须需要状态,如文件锁。如果客户端申请了文件锁,但是服务端重启了,由于NFSv3无状态,客户端再执行锁操作可能就会出错了。NFSv3需要NLM协助才能实现文件锁功能,但是有的时候两者配合不够协调。NFSv4设计成了一种有状态的协议,自身实现了文件锁功能,就不需要NLM协议了。

后来的 NFSv4.1

与NFSv4.0相比,NFSv4.1最大的变化是支持并行存储了。在以前的协议中,客户端直接与服务器连接,客户端直接将数据传输到服务器中。当客户端数量较少时这种方式没有问题,但是如果大量的客户端要访问数据时,NFS服务器很快就会成为一个瓶颈,抑制了系统的性能。NFSv4.1支持并行存储,服务器由一台元数据服务器(MDS)和多台数据服务器(DS)构成,元数据服务器只管理文件在磁盘中的布局,数据传输在客户端和数据服务器之间直接进行。由于系统中包含多台数据服务器,因此数据可以以并行方式访问,系统吞吐量迅速提升。现在新的是nfsv4.2

所以尽可能用nfs4

补充:

nfs4挂载的fsid问题

问题现象:

挂载nfs4时,报错:reason given by server:No such file or directory

背景知识:

NFSv4将所有共享使用一个虚拟文件系统展示给客户端。伪文件系统根目录(/)使用fsid=0标示,只有一个共享可以是fsid=0。客户端需要使用“nfs server ip:/”挂载伪文件系统,伪文件系统一般使用RO方式共享,其他共享可以通过mount–bind选项在伪文件系统目录下挂载。客户端挂载过程需要通过mount–t nfs4指定NFS版本为4,默认采用nfsv3。

解决:

以下是我的配置文件,我想挂在/datapool/nfs目录

/*(rw,fsid=0,insecure,no_root_squash)

/datapool/nfs*(rw,fsid=1000,insecure,no_root_squash

然后mount-t nfs4 ip:/datapool/nfs/mnt/nfs/

nfs配置参数选项说明:

ro:共享目录只读;

rw:共享目录可读可写;

all_squash:所有访问用户都映射为匿名用户或用户组;

no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;

root_squash(默认):将来访的root用户映射为匿名用户或用户组;

no_root_squash:来访的root用户保持root帐号权限;

anonuid=<UID>:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534);

anongid=<GID>:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534);

secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;

insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率;

no_wdelay:若有写操作则立即执行,应与sync配合使用;

subtree_check(默认):若输出目录是一个子目录,则nfs服务器将检查其父目录的权限;

no_subtree_check:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

Troubleshooting

1、在上面的操作过程中,如果你不幸遇到下面这个问题的话,可以尝试更新 Linux kernel或通过打开 IPv6来解决这个问题,这是1个 bug:

mount.nfs4: Cannot allocate memory

2、如果遇到如下问题,可能是因为你的 mount-t nfs使用的是 nfsv3协议,需要明确指出使用 nfsv4协议挂载 mount-t nfs4:

mount: mount to NFS server'172.16.20.1' failed: RPC Error: Program not registered.

如果网络不稳定

NFS默认是用UDP协议,换成TCP协议挂载即可:

mount-t nfs 11.11.165.115:/tmp/test0920/data-o proto=tcp-o nolock

nfs:server xxx.xxx.xxx.xxx is not responding,still trying的解决方法

方法1:

我在 arm上通过NFS共享文件时出现下面的错误提示

nfs:server is not responding,still trying原因分析: NFS的默认传输协议是 UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象。

解决方法:在客户端改用TCP协议,使用下面的命令,**#mount-o tcp 10.10.19.25:/home/export/mnt/local

方法2:**在目标板上通过NFS复制PC机上较大文件到目标板上的时候遇到的问题:

nfs: server*** not responding, still trying

修改方法:

nfs mount时候出现的NFS崩溃,按照以下的方式mount

mount-t nfs-o intr,nolock,rsize=1024,wsize=1024 192.168.1.3/root/somedir/client

附问题四:在测试时,“./progressbar-qws”后出现如Q3一样的提示,按Q3来处理。

以上参考了一些“快乐的天空”的经验,他的网页是:

他的

mount-t nfs-o intr,nolock,rsize=1024,wsize=1024 192.168.1.3/root/somedir/host

应该改成

mount-t nfs-o intr,nolock,rsize=1024,wsize=1024 192.168.1.3/root/somedir/client

CentOS7下安装erlang和rabbitmq

1、首先在usr/local目录下创建一个erlang目录,并进入该目录

2、在此目录下下载最新版本的erlang,当前版本为20.0

3、下载完成后,检查目录内容

4、解压下载的文件

5、由于编译安装Erlang对环境有要求,为避免编译时出现软件包未安装的错误,预先使用yum安装Erlang所需的软件包

yum install ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel-y

yum install openssl-devel zlib-devel–y

yum-y install make ncurses-devel gcc gcc-c++ unixODBC unixODBC-devel openssl openssl-devel

执行完上述三条yum命令后,开始编译安装erlang

回到创建的erlang目录,进入解压后的文件夹

6、执行configure命令,指定安装目录为/opt/erlang

./configure--prefix=/opt/erlang--with-ssl-enable-threads-enable-smmp-support-enable-kernel-poll--enable-hipe--without-javac

出现以下内容表示配置完成

7、使用make命令进行编译

make&& make install

编译过程可能需要大约10分钟

安装完成后,创建软连接

ln-s/opt/erlang/bin/erl/usr/local/bin/erl

测试Erlang安装是否成功,进入/usr/local/bin目录

erl

出现如下提示信息,表示Erlang安装成功

Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.0(abort with ^G)

1>

在1>后输入EvenN= lists:filter(fun(N)-> N rem 2== 0 end, lists:seq(1,100)).

出现以下提示信息

[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,

44,46,48,50,52,54,56,58|...]

2>

输入halt().

此时,Erlang已安装成功,接下来修改环境变量

vim/etc/profile

在文件末尾输入以下信息

ERLANG_HOME=opt/erlang

PATH=$ERLANG_HOME/bin:$PATH

export ERLANG_HOME

export PATH

保存并退出文件,然后重新激活环境变量

source/etc/profile

验证环境变量是否已追加成功

echo$ERLANG_HOME

echo$PATH

OK,Erlang安装完成。

下载最新版本的rabbitmq,当前最新版本为3.6.10

回到erlang目录下,使用命令

wget rabbitmq.com/releases/r...

在执行wget命令时,如果出现openssl版本过低,需要更新的错误,使用命令yum update-y wget,更新完成后再次执行wget命令

查看下载的文件

下载的文件名为rabbitmq-server-generic-unix-3.6.10.tar.xz,需要安装xz解压软件

yum-y install xz

解压rabbitmq

xz-d rabbitmq-server-generic-unix-3.6.10.tar.xz

tar-xvf rabbitmq-server-generic-unix-3.6.10.tar

将解压后的文件移动到安装目录

mv rabbitmq_server-3.6.10/opt/

进入rabbitmq的sbin目录,有两种启动方式:前台启动和后台启动

命令分别是

前台启动:./rabbitmq-server

后台启动:./rabbitmq-server-detached

开启插件管理页面:./rabbitmq-plugins enable rabbitmq_management

关闭服务:./rabbitmqctl stop

设置登录账号和密码

./rabbitmqctl add_user admin 123456

设置用户类型

./rabbitmqctl set_user_tags admin administrator

设置用户权限

./rabbitmqctl set_permissions-p/ admin".*"".*"".*"

由于使用页面管理,启动后开启页面插件,并关闭防火墙,使用ip地址登录

输入设置的账号和密码进行登录

看到右上角的账号和版本信息,表示rabbitmq已成功运行

阅读剩余
THE END