nagios工作原理

  nagios的功能是监控服务和主机,但是其自身并不包括这些功能,所有的监控、检测功能都是通过各种插件来完成的。
  启动nagios后,它会周期性的自动调用插件去检测服务器状态,同时nagios会维持一个队列,所有插件返回的状态信息都进入队列,nagios每次都从队首读取信息,进行处理后,再把状态结果通过web显示出来。这就是被动模式,经常用于监控主机的系统资源,比如系统负载、磁盘使用率、内存使用率、网络状态、系统进程数等等。
  另一种是主动模式,主要是nagios服务器主动去获取数据,常用于探测URL的监控和服务的状态监控。
  相比于主动模式中服务器主动去被监控机上轮询获取监控数据的方式。这样做的一个很大优势就是将除去数据处理的其他工作都放在了被监控机上面(包括数据的传输),就避免了被监控机数量大时一次轮询时间过长而导致监控反应延迟,这也是被动模式能承担更大监控量的关键。nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的bxec里放有nagios自带的可以使用的所有插件。

nagios主要功能

  • 网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)
  • 主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin)
  • 指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)
  • 通过配置Nagios远程执行插件远程执行脚本
  • 远程监控支持SSH或SSL加通道方式进行监控
  • 简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)
  • 包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)
  • 可并行服务检查
  • 能够定义网络主机的层次, 允许逐级检查, 就是从父主机开始向下检查
  • 当服务或主机出现问题时发出通告,可通过email, pager, sms 或任意用户自定义的plugin进行通知
  • 能够自定义事件处理机制重新激活出问题的服务或主机
  • 自动日志循环
  • 支持冗余监控
  • Web界面可以查看当前网络状态,通知,问题历史,日志文件等
  • nagios部署安装

nagios配置文件

每个文件或目录含义如下表所示:

  • cgi.cfg 控制CGI访问的配置文件nagios.cfg Nagios 主配置文件
  • resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$USER1$
  • objects objects 是一个目录,在此目录下有很多配置文件模板,用于定义Nagios 对象
  • objects/commands.cfg 命令定义配置文件,其中定义的命令可以被其他配置文件引用
  • objects/contacts.cfg 定义联系人和联系人组的配置文件
  • objects/localhost.cfg 定义监控本地主机的配置文件
  • objects/printer.cfg 定义监控打印机的一个配置文件模板,默认没有启用此文件
  • objects/switch.cfg 定义监控路由器的一个配置文件模板,默认没有启用此文件
  • objects/templates.cfg 定义主机和服务的一个模板配置文件,可以在其他配置文件中引用
  • objects/timeperiods.cfg 定义Nagios 监控时间段的配置文件
  • objects/windows.cfg 监控Windows 主机的一个配置文件模板,默认没有启用此文件

localhost.cfg文件本地监控:

# 第一个命令定义:
# 通过check_ping脚本确保监测主机和被监测主机的连通性,如果网络丢包率到达20%则产生warning警告,到达60%则产生critical警告:
define service{
use local-service
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
# 第二个命令定义:
#监测远程主机根分区磁盘状况,如果根分区可用空间低于20%会产生Warning警告,如果可用空间低于10%则产生Critical警告:
define service{
use local-service
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
# 第三个命令定义:
# 监测远程主机当前的登录用户数量,如果登录数量大于20用户则产生warning警告,如果大于50则产生critical警告:
define service{
use local-service
host_name localhost
service_description Current Users
check_command check_local_users!20!50
}
# 第四个命令定义:
# 监测远程主机当前的进程总数,如果大于700进程则产生warning警告,如果大于800进程则产生critical警告:
define service{
use local-service
host_name localhost
service_description Total Processes
check_command check_local_procs!700!800!RSZDT
}
# 第五个命令定义:
# 监测远程主机当前的僵尸进程,如果大于5进程则产生warning警告,如果大于10进程则产生critical警告:
define service{
use local-service
host_name localhost
service_description zombie Processes
check_command check_local_procs!5!10!Z
}
# 第六个命令定义:
# 监测远程主机当前的本地负载量:
define service{
use local-service
host_name localhost
service_description Current Load
check_command check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
}
# 第七个命令定义:
# 监测远程主机swap文件系统使用量,如果swap可用空间低于20%则产生warning警告,低于10%则产生critical警告:
define service{
use local-service
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}
# 第八个命令定义:
# 监测SSH连接可用性,但消息通知功能默认被关闭,因为并不是所有用户都有权限SSH。
define service{
use local-service
host_name localhost
service_description SSH
check_command check_ssh
notifications_enabled 0
}

 PS:这里check_command后面的命令名是/usr/local/nagios/etc/objects/command.cfg配置文件中定义的,如:

安装部署nagios

1. 环境配置

监控服务需安装:nagios+nagios插件+nrpe
被监控服务需安装:nagios插件+nrpe
ip 角色 主机名
10.0.0.1 nagios监控服务端 VM_0_10_centos
10.0.0.2 nagios被监控端 VM_0_16_centos

调整字符集:

echo 'exprot LC_ALL=C' >>/etc/profile
source /etc/profile

关闭防火墙和selinux:

systemctl stop firewalld
systemctl disable firewalld setenforce 0
[root@VM_0_10_centos nginx]# getenforce
Disabled

配置时间同步ntp:

yum -y install ntp
/usr/sbin/ntpdate pool.ntp.org
uptime

所需软件包:

nagios-4.2.1.tar.gz               nagios的主软件包
nagios-plugins-2.1.2.tar.gz nagios的插件包
安装环境包:
yum install -y \
-- gcc \
-- glibc \
-- glibc-common \
-- gd \
-- gd-devel \
-- xinetd \
-- openssl-devel

创建nagios用户和组:

[root@VM_0_10_centos src]# useradd -m nagios
[root@VM_0_10_centos src]# passwd nagios
Changing password for user nagios.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@VM_0_10_centos src]# groupadd nagcmd
[root@VM_0_10_centos src]# usermod -a -G nagcmd nagios
[root@VM_0_10_centos src]# usermod -a -G nagcmd apache

2.nagios服务端安装

2.1 下载nagios软件

[root@VM_0_10_centos src]# wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.2.1.tar.gz
[root@VM_0_10_centos src]# wget https://nagios-plugins.org/download/nagios-plugins-2.1.2.tar.gz

2.2 源码编译安装nagios以及相关插件

# 解压
[root@VM_0_10_centos src]# tar -zxvf nagios-4.2.1.tar.gz # 编译安装
[root@VM_0_10_centos nagios-4.2.1]# ./configure --with-command-group=nagcmd
[root@VM_0_10_centos nagios-4.2.1]# make all # 编译安装并初始化配置文件
[root@VM_0_10_centos nagios-4.2.1]# make install
[root@VM_0_10_centos nagios-4.2.1]# make install-init
[root@VM_0_10_centos nagios-4.2.1]# make install-config
[root@VM_0_10_centos nagios-4.2.1]# make install-webconf
[root@VM_0_10_centos nagios-4.2.1]# make install-commandmode
# 编译安装nagios插件
[root@VM_0_10_centos nagios-4.2.1]# cd ..
[root@VM_0_10_centos src]# tar -zxvf nagios-plugins-2.1.2.tar.gz
[root@VM_0_10_centos src]# cd nagios-plugins-2.1.2
[root@VM_0_10_centos nagios-plugins-2.1.2]# ./configure --with-nagios-user=nagios -
-with-nagios-group=nagios # 编译安装
[root@VM_0_10_centos nagios-plugins-2.1.2]# make
[root@VM_0_10_centos nagios-plugins-2.1.2]# make install

2.3 配置邮件联系人信息

可以编辑 /usr/local/nagios/etc/objects/contacts.cfg ,将联系人邮件地址换成你自己的。

[root@VM_0_10_centos src]# cd /usr/local/nagios/etc/objects/
[root@VM_0_10_centos objects]# pwd
/usr/local/nagios/etc/objects
[root@VM_0_10_centos objects]# cp contacts.cfg contacts.cfg.bak

编辑 vi contacts.cfg配置文件:将签名nagios改为自己邮箱

PS:若系统中需通过安装sedmail来发送邮件(yum install sendmail sendmail-cf)

想让哪个服务告警,则需要在那个服务下添加contactgroup组的信息,如:

cat /usr/local/nagios/etc/objects/contacts.cfg

[root@VM_0_10_centos src]# vi /usr/local/nagios/etc/servers/10.0.0.2.cfg
define service {
use generic-service
host_name VM_0_16_centos
service_description zombie Processes
check_command check_local_procs!5!10!Z
max_check_attempts 5
normal_check_interval 1
contact_groups admins # 这里添加服务告警
}

2.4 为nagios创建登录web界面的密码

[root@VM_0_10_centos objects]# htpasswd -c /usr/local/nagios/etc/htpasswd.users admin
New password:
Re-type new password:
Adding password for user admin

2.5 设置nagios服务开机自启并启动ngios

[root@VM_0_10_centos objects]# systemctl enable nagios
nagios.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig nagios on
[root@VM_0_10_centos objects]# chkconfig --list | grep nagios
nagios 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@VM_0_10_centos objects]# systemctl restart nagios # 检查是否成功启动
[root@VM_0_10_centos objects]# ps -ef | grep nagios # 检查文件语法是否正确(只需关注Total Warnings: 0和Total Errors: 0这两项即可)
[root@VM_0_10_centos ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

这里我安装的nginx和httpd,所以需要修改下httpd的端口号,不然会有冲突

# 先查看是否开启,如果开启了,stop下
[root@VM_0_10_centos ~]# systemctl status httpd # 查询httpd的配置文件
[root@VM_0_10_centos ~]# find / -name "httpd*conf" # 编辑httpd.conf配置文件(找到Listen,将默认的80修改为没有被占用的端口,我这里设置82)
[root@VM_0_10_centos ~]# vi /etc/httpd/conf/httpd.conf
Listen 82 # 保存退出,重启httpd服务即可
[root@VM_0_10_centos ~]# systemctl restart httpd

接下来通过浏览器访问nagios吧:http://ip:82/nagios

验证nagios服务端的监控功能,如实现监控服务器对被监控服务器磁盘负载情况的监控

1. 环境准备

下载安装nrpe:

# 下载nrpe源码包
[root@VM_0_10_centos src]# wget https://jaist.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz # 确认是否安装好openssl(如果没有,安装一下)
[root@VM_0_10_centos src]# rpm -qa | grep openssl # 解压
[root@VM_0_10_centos src]# tar -zxvf nrpe-2.15.tar.gz
[root@VM_0_10_centos nrpe-2.15]# ./configure # 编译安装
[root@VM_0_10_centos nrpe-2.15]# make all
[root@VM_0_10_centos nrpe-2.15]# make install-plugin
[root@VM_0_10_centos nrpe-2.15]# make install-daemon

PS:这里server服务端的配置已完成

2. 在nagios-client以同样的方式安装nagios-plugins插件和nrpe即可,详细安装步骤参考上文。

3. 客户端配置(nagios-client)

3.1. 加入可以监控当前client的nagios-server端的ip地址如下

# 编辑nrpe的配置文件/usr/local/nagios/etc/nrpe.cfg修改大约在81行
[root@VM_0_16_centos nagios]# cp /usr/local/src/nrpe-2.15/sample-config/nrpe.cfg etc/
[root@VM_0_16_centos nagios]# chown -R nagios.nagios etc/
[root@VM_0_16_centos sample-config]# sed -i 's/allowed_hosts=127.0.0.1/allowed_hosts=10.0.0.1/g' /usr/local/nagios/etc/nrpe.cfg

3.2. /usr/local/nagios/etc/nrpe.cfg文件结尾添加要监控的插件

画圈部分为默认监控的插件,如果需要监控其他内容,可添加并安装相关的插件,本实验监控的是磁盘负载check_load,已包含在默认监控的内容里面了

3.3 启动nrpe

# 启动nrpe
[root@VM_0_16_centos nagios]# /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d # 设置开机自启
[root@VM_0_16_centos nagios]#echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >> /etc/rc.local # 检查服务是否启动成功
[root@VM_0_16_centos nagios]# netstat -lnt | grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN
tcp6 0 0 :::5666 :::* LISTEN
[root@VM_0_16_centos nagios]# lsof -i:5666
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nrpe 5828 nagios 4u IPv4 3869385 0t0 TCP *:5666 (LISTEN)
nrpe 5828 nagios 5u IPv6 3869386 0t0 TCP *:5666 (LISTEN) # PS:重启nrpe 可以先用killall杀掉nrpe进程再启动即可

4. 服务端(nagios-server)配置

1)创建host.cfg主机文件添加被监控的主机,这里使用lohosthost.cfg作为模板取前51行作为host.cfg的模板

# 配置/usr/local/nagios4/etc/objects/localhost.cfg
[root@VM_0_10_centos src]# head -n 51 /usr/local/nagios/etc/objects/localhost.cfg > /usr/local/nagios/etc/objects/hosts.cfg

用vi编辑hosts.cfg改为以下内容

# 授权
[root@VM_0_10_centos objects]# chown -R nagios.nagios /usr/local/nagios/etc/objects/hosts.cfg

2)创建services.cfg监控服务文件添加要监控的服务

[root@VM_0_10_centos objects]# touch /usr/local/nagios/etc/objects/services.cfg
[root@VM_0_10_centos objects]# chown -R nagios.nagios /usr/local/nagios/etc/objects/services.cfg
[root@VM_0_10_centos objects]# vi /usr/local/nagios/etc/objects/services.cfg
define service {
use generic-service ; Monitor parameters using templates.cfg templates
host_name VM_0_16_centos ; The host name of the monitored server
service_description check load
check_command check_nrpe!check_load ; Service commands to monitor
}

这一步其实可以(1)(2)简化一下,将hosts.cfg和services.cfg合并为一个配置文件,具体如下

# 首先将nagios.cfg配置文件中的servers目录注释去掉,让其能读取到这个目录及目录下的文件
[root@VM_0_10_centos etc]# less nagios.cfg | grep dir
# extension) in a particular directory by using the cfg_dir
# directive as shown below:
cfg_dir=/usr/local/nagios/etc/servers # 该目录是不存在的,需要创建目录并赋予对应的权限
[root@VM_0_10_centos etc]# mkdir -p servers
[root@VM_0_10_centos etc]# chmod 755 servers/
[root@VM_0_10_centos servers]# chmod 644 services.cfg # 将services.cfg文件重命名为被监控的主机ip
[root@VM_0_10_centos servers]# mv services.cfg 10.0.0.2.cfg # 编辑10.0.0.2.cfg文件,将之前添加的hosts.cfg文件随便命名或删除即可
[root@VM_0_10_centos servers]# vi 10.0.0.2.cfg define host{
use linux-server ; Name of host template to use
; This host definition will inherit all variables that are defi
ned ; in (or inherited by) the linux-server host template definitio
n. host_name VM_0_16_centos
alias 102-server
address 10.0.0.2
}
define service {
use generic-service
host_name VM_0_16_centos # 这个地方一定要被监控主机的主机名,如果是ip会报错
service_description check load
check_command check_nrpe!check_load
max_check_attempts 5
normal_check_interval 1
} # 检查配置文件语法是否错误
[root@VM_0_10_centos servers]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg # 重启nagios服务
[root@VM_0_10_centos servers]# /etc/init.d/nagios reload
Reloading nagios configuration (via systemctl): [ OK ]

3)在commands.cfg 中加入check_nrp插件配置

# 编辑/usr/local/nagios/etc/objects/commands.cfg  在文件结尾添加以下内容,这里注意下路径问题"/"
[root@VM_0_10_centos objects]# vi /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

4) 检查nagios主配置文件并重启

[root@VM_0_10_centos etc]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@VM_0_10_centos etc]# /etc/init.d/nagios reload
Reloading nagios configuration (via systemctl): [ OK ]

5) 客户端测试是否有监控的主机及服务

打开浏览器登录nagios出现以下则说明没有监控到主机,意思为(似乎您没有权限查看您所请求的任何主机的信息…)

解决方法:

把cgi.cfg的nagiosadmin全部替换成admin(我们之前设置的登录名)

[root@VM_0_10_centos ~]# sed -i 's/nagiosadmin/admin/g' /usr/local/nagios/etc/cgi.cfg

# 检查语法并重启nagios
[root@VM_0_10_centos ~]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
[root@VM_0_10_centos ~]# /etc/init.d/nagios reload
Reloading nagios configuration (via systemctl): [ OK ]

打开浏览器访问
可以看到被监控的主机的相关信息

但是上面的主机名不是被监控主机的,通过本地监控服务器上测试:

# 报错NRPE: Unable to read output
[root@VM_0_10_centos objects]# /usr/local/nagios/libexec/check_nrpe -H 10.0.0.2 -c check_load
NRPE: Unable to read output # 但是能输出nrpe版本
[root@VM_0_10_centos objects]# /usr/local/nagios/libexec/check_nrpe -H 10.0.0.2
NRPE v2.15

[root@VM_0_10_centos objects]# /usr/local/nagios/libexec/check_nrpe -H 10.0.0.2 -c check_load
  OK - load average: 0.00, 0.12, 0.23|load1=0.000;15.000;30.000;0; load5=0.120;10.000;25.000;0; load15=0.230;5.000;20.000
  ;0;

通过上面修改的配置文件,将(1)(2)组合为一个被监控主机名.cfg文件之后,重启nagios服务,web端能看到监控的服务名了

当我点击主机名进入的时候发现报错如下:

解决:这个是nrpe的路径问题,在上面3)在commands.cfg 中加入check_nrp插件配置添加的内容中忘记将"/"斜杆加上,上班已经修正。重启nagios服务再次运行,问题解决

[root@VM_0_10_centos etc]# vi objects/commands.cfg
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
} [root@VM_0_10_centos etc]# /etc/init.d/nagios reload
Reloading nagios configuration (via systemctl): [ OK ]

hosts.cfg配置文件报错参考博客:
搭建参考博客:
  

【nagios监控】基于linux搭建nagios监控的更多相关文章

  1. 基于Apache搭建Nagios图形监控

    基于apache 的稍微简单一点么?实验一下子就OK了... 环境: System: [root@losnau etc]# cat /etc/issueRed Hat Enterprise Linux ...

  2. 自动安装脚本-------------基于LVMP搭建Nagios 监控

    Mysql初始化参数(mysql-5.6.31) /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local ...

  3. Security基础(四):OpenSSL及证书服务常用系统监控命令、搭建nagios监控服务器、配置文件及插件使用、监控远程主机的公有数据、监控远程主机的私有数据

    一.OpenSSL及证书服务常用系统监控命令 目标: 本案例要求练习常用的系统监控命令完成以下任务: 使用vmstat命令监控内存及磁盘I/O信息 使用iostat命令监控CPU处理器及磁盘的I/O信 ...

  4. 【zabbix部署】基于linux安装zabbix监控服务和被监控服务

    环境配置 zabbix_server:10.0.0.1 zabbix_agentd:10.0.0.1,10.0.0.2(暂定) 操作系统:centos7.6 安装环境配置 1. LNMP环境 zabb ...

  5. Prometheus+Grafana监控-基于docker-compose搭建

    前言 Prometheus Prometheus 是有 SoundCloud 开发的开源监控系统和时序数据库,基于 Go 语言开发.通过基于 HTTP 的 pull 方式采集时序数据,通过服务发现或静 ...

  6. 搭建基于Nagios的监控系统——之监控远程Linux服务器

    上一篇介绍了如何安装Nagios Core,这一篇跟大家分享一下如何将一台远程的Linux服务器加入纳入监控范围. 第一部分:在远程Linux上安装Nagios Plugins和NRPE   第一步: ...

  7. Nagios学习笔记四:基于NRPE监控远程Linux主机

    1.NRPE简介 Nagios监控远程主机的方法有多种,其方式包括SNMP.NRPE.SSH和NCSA等.这里介绍其通过NRPE监控远程Linux主机的方式. NRPE(Nagios Remote P ...

  8. linux系统下Nagios+rrdtool+Pnp4nagios监控环境的搭建

    环境中的软件版本>>>>>>>>>>>>>>>>>>nagios版本:3.5.1rrdtoo ...

  9. 在Nginx中搭建Nagios监控平台

    本文只做Nginx下Nagiox安装的说明,其它关于Nagios监控的详细配置请参考我的另一篇文章[Ubuntu 10.04下构建Nagios监控平台] Nagios依赖PHP环境和perl环境.由于 ...

随机推荐

  1. php弹出确认框

    下面的代码只需要放在同一个文件中就可以运行了~~ html<a href="__URL__/shanchu/id/{$vo.id}" onclick='return del( ...

  2. Objective-C (OC)

    1.OC  运行效率比较高,仅次于c.开发过程时,效率也比较高,不会次于java和C++: :表示继承 “{}”之间写字段或声明 }和@end之间写函数 import 相当于include 作用于和j ...

  3. 鲲鹏云实验-Python+Jupyter机器学习基础环境

    [摘要] 介绍Ubuntu 18.04环境下Python3常用科学计算和数据分析包(numpy, scipy, matplotlib, sklearn, pandas)的安装,以及Jupyter No ...

  4. 【重磅资料】ArchSummit全球架构师峰会·2019华为云技术专场资料下载

    ArchSummit全球架构师峰会是InfoQ中国团队推出的重点面向高端技术管理者.架构师的技术会议,54%参会者拥有8年以上工作经验.ArchSummit聚焦业界强大的技术成果,秉承"实践 ...

  5. .NET Core简单使用RabbitMq

    RabbitMQ简介 RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点, ...

  6. Android Application 详细介绍

    一.先看看文档里怎么说 Base class for those who need to maintain global application state. You can provide your ...

  7. 三菱PLC和卓岚串口服务器使用心得

    下面介绍使用FX3u-16M以及卓岚产品ZLAN5103,实现GX Works通过虚拟串口监控PLC 一.PLC通讯口 圆头8孔RS422接口,线序如下: 1.FX3u不同子型号的PLC,引脚定义可能 ...

  8. MySql数据基础之数据表操作

    MySql数据库中主要利用多个数据表进行数据的存储,我们可以将数据表理解成一个Excel表格,Excel表格的第一列可以将它看为id列,主要任务是数据表中数据的唯一标识,不能重复.不能为空.如果将数据 ...

  9. 开发中遇到的一些bug及解决方案

    一.在使用UIStackView时报“UIStackView before iOS 9.0”.

  10. The file “XXX.app” couldn’t be opened because you don’t have permission to view it.问题修复

    出现下列问题 怎么解决呢 如图 将info.plist的文件中的Executable.file中的文件修改为:$(PRODUCT_NAME) 重新编译 com+R不出意外的话 运行成功 ok 解决~