日历

2019年三月
« 2月    
 123
45678910
11121314151617
18192021222324
25262728293031

最近评论

    linux企业应用

    Python报错:module 'pygal' has no attribute 'Worldmap'

    在《Python编程:从入门到实践》书中的一个项目用到pygal.Worldmap,但是报错:module ‘pygal’ has no attribute ‘Worldmap’,提示pygal已经没有Worldmap模块,解决方法如下:

    在windows命令行中运行下面语句(注意pip3/pip)
    pip install pygal_maps_world

    在代码文件中将:
    import pygal
    wm=pygal.Worldmap()
    修改为:
    import pygal
    wm = pygal.maps.world.World()
    就可以了

    linux企业应用

    Python报错:ImportError: No module named 'pygal.i18n'

    在《Python编程:从入门到实践》书中的一个项目用到pygal.i18n获取国别码,但是一直报错:ImportError: No module named ‘pygal.i18n’,提示pygal已经没有i18n模块,网上查了一下要改用pygal_maps_world.i18n,解决方法如下:

    在windows命令行中运行下面语句(注意pip3/pip)
    pip install pygal_maps_world

    在代码文件中将:
    from pygal.i18n import COUNTRIES
    修改为就可以了:
    from pygal_maps_world.i18n import COUNTRIES

    linux企业应用

    OraclRAC迁移中遇到的问题

    简单描述
    2台oracle做RAC需要共享9T的空间,因为oracle识别的硬盘不能大于2T,故,每个硬盘设置为1.9T。
    平台上每个lun大小为8T,所以共享的9T空间在2个lun上。
    oracleRAC1:系统盘500G在LUN 1上,5个1.9T的厚置备磁盘,在LUN 1上3块,在LUN 2上2块
    OracleRAC2:系统盘500G在LUN 2上,共享lun 1上的3块盘,和LUN 2上的2块盘,共享盘添加顺序和OracleRAC1上的顺序一致。
    问题:
    因存储电源故障,需要更新电源模块并升级微码,需要将上述OracleRAC迁移到另一套没有故障的存储上。
    操作步骤:
    1、关机,编辑OracleRAC2虚拟机,将共享磁盘从虚拟机中移除(千万不要选择从虚拟机中移除并从磁盘删除文件)。移除完成后,将虚拟机迁移到LUN 4上。
    2、迁移OracleRAC1虚拟机,迁移中,将LUN1上的3块磁盘选择LUN3,将LUN2上的2块磁盘选择LUN4,由于迁移磁盘较大,总共10T,用时5个小时左右。
    3、编辑OracleRAC2虚拟机,按照OracleRAC1中的共享磁盘顺序,依次添加上。
    4、因该过程用时较多,迁移完成已是晚上11点左右,所以将2台服务器启动,确认业务正常后下班。
    存在问题:
    第二天查看2台OracleRAC虚拟机的状态,发现OracleRAC1占用了3个LUN,LUN 1,LUN 3,LUN 4,状态不正常,OracleRAC2占用LUN 3和LUN 4的磁盘空间,属于正常现象。经核查,发现OracleRAC1的vmx文件和log文件没有迁移到LUN3上。
    解决方法:
    1、OracleRAC1关机,在client中,右键该虚拟机,选择“从清单中移除”
    2、浏览LUN1存储,找到OracleRAC1的文件夹,将关于虚拟机的vmx和几个log文件下载到本地磁盘上
    3、将下载到本地的vmx文件和log文件上传到LUN3存储上OracleRAC1的目录下,右键vmx,将该虚拟机添加到清单中
    4、启动OracleRAC1,业务正常,占用磁盘在LUN3和LUN4,一切恢复正常了。

    linux企业应用

    自动草稿

    linux企业应用

    ubuntu16.04修改网卡名称,配置静态IP

    ubuntu16.04也像Centos7一样不使用eth来命名了,如果还想像传统一样使用eth,需要修改配置文件了。
    步骤如下:

    修改grub文件:
    $ sudo vim /etc/default/grub

    GRUB_CMDLINE_LINUX=””
    改为:
    GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0″更新配置,重新生成启动文件:
    $ sudo grub-mkconfig -o /boot/grub/grub.cfg修改静态ip
    $ sudo vim /etc/network/interfaces
    在末尾添加:
    auto eth0
    iface eth0 inet static
    address IP
    netmask NETMASK
    gateway GATEWAY重启服务:
    $ /etc/init.d/networking restart 或者用下面的命令
    $ sudo systemctl restart networking.service

    linux企业应用

    TypeError: argument 1 must be 2-item sequence, not int

    书上代码有需要改进的地方
    screen=pygame.display.set_mode(1200,800)运行的时候回报错TypeError: argument 1 must be 2-item sequence, not int,改成下面的就好了:
    screen_width=800
    screen_height=600
    screen=pygame.display.set_mode((screen_width,screen_height),0,32)

    完整代码如下:
    import sys
    import pygame

    def run_game():
    pygame.init()
    screen_width=800
    screen_height=600
    screen=pygame.display.set_mode((screen_width,screen_height),0,32)
    pygame.display.set_caption(“Alien Invasion”)

    while True:
    for event […]

    linux企业应用

    python3.7.2 + pygame1.9.4实现游戏《外星人入侵》

    下载的pygame库名中cp27代表python2.7,其它同理。
    我现在的python版本是3.7.2,所以按照道理,应该去下面的网址https://www.lfd.uci.edu/~gohlke/pythonlibs/
    Pygame, a library for writing games based on the SDL library.

    pygame-1.9.4-cp27-cp27m-win32.whl
    pygame-1.9.4-cp27-cp27m-win_amd64.whl
    pygame-1.9.4-cp35-cp35m-win32.whl
    pygame-1.9.4-cp35-cp35m-win_amd64.whl
    pygame-1.9.4-cp36-cp36m-win32.whl
    pygame-1.9.4-cp36-cp36m-win_amd64.whl
    pygame-1.9.4-cp37-cp37m-win32.whl
    pygame-1.9.4-cp37-cp37m-win_amd64.whl

    我的电脑是64位的,所以下载了最后一个个,同理,如果你们的电脑是32位的请下载对应的版本。
    https://bitbucket.org/pygame/pygame/downloads/ 这个网址里,我暂时没有下载到3.7.2对应的版本。
    下载后终于安装成功了:
    D:\TensorFlow\python_work>pip install pygame-1.9.4-cp37-cp37m-win_amd64.whl
    Processing d:\tensorflow\python_work\pygame-1.9.4-cp37-cp37m-win_amd64.whl
    Installing collected packages: pygame
    Successfully installed pygame-1.9.4
    You are using pip version 19.0.2, however version 19.0.3 is available.
    You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.

    linux企业应用

    文件权限导致ssh无法启动、启动后无法连接

    今天一个客户的linux连接不上了,启动的时候有一个错误一闪而过,没能看清,重启完成后,telnet IP 22端口没通。进入操作系统,telnet -tlunp | grep sshd,也没有sshd的影子,service sshd start,提示错误如下:
    Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.      [FAILED]
    根据上面的提示,这个是权限的问题
    可采取以下几步解决
    chown   -R   root.root    /var/empty/sshd
    chmod 744 /var/empty/sshd
    service sshd restart
    提示sshd重启成功,但是提示了很多信息,没有拍照,只记住了一点:ssh_host_rsa_key too open,而且使用putty无法登录系统。进入/etc/ssh目录,发现该目录下所有文件都可执行,感觉不对,找同样的一台linux,对照着,将所有文件权限修改,再用putty连接系统,连接成功。

    linux企业应用

    linux世界里/,叫根分区,根目录

    linux世界里/,叫根分区,根目录,不会叫,叫根文件夹也行,怎么会叫根磁盘呢,我是不是得维护根分区,根目录。

    根磁盘,我真心接受不了。第一次听说的时候我纳闷了很久想不出这个根磁盘表达的是什么意思,现在虽然理解了,但是听到了心里还是很不舒坦。很不愿接受根磁盘这个叫法,哈哈哈哈哈哈哈哈哈哈哈哈哈哈!

    linux企业应用

    FreeBSD11.2开启SSH远程登录

    一、安装时选择上SSH,或者源码安装SSH
    二、使用root登陆系统
    三、使用vi编辑器编辑/etc/inetd.conf,去掉ssh前的#,有2处
    四、编辑/etc/rc.conf,添加一行sshd_enable=”YES”
    五、编辑/etc/ssh/sshd_config,将
    #PermitRootLogin no                 改为  PermitRootLogin yes                 //允许root登陆
    #PasswordAuthentication no    改为  PasswordAuthentication yes    //使用系统PAM认证
    #PermitEmptyPasswords no     改为  PermitEmptyPasswords no     //不允许空密码
    保存退出
    六、重启SSHD服务,/etc/rc.d/sshd start
    七、使用putty或者,Xshell等,使用root账号和密码就可以登录了。

    linux企业应用

    Freebsd修改密码提示错误passwd:pam_chauthtok(): error in service module

    freebsd输入用户名和密码,提示密码错误,无法进入系统,但是密码没有修改过,可以确定是某个地方出问题了。
    重启进入单用户模式,使用passwd root修改密码,提示passwd:pam_chauthtok(): error in service module.
    执行命令touch /root/1.txt,提示系统只读,
    单用户模式下如何让根分区可读写很简单,执行
    mount -uw / 就可以了,但是又提示文件系统报错,需要执行fsck命令进行磁盘文件检查,fsck命令执行完成后,再修改用户的密码,就没有报错了(也许直接重启,然后使用root和密码登录看一下更好)。
    重启后可以进入了。

    问题的原因还是文件系统出现了问题,也许在单用户模式下执行fsck -y进行文件系统检查就好了,不用修改密码。

    linux企业应用

    Ubuntu 18.04版本设置root账户本地和远程登录

    Ubuntu18.04默认是不允许root账户本地和远程登录的,因此想要使用root本地和远程登录,可以使用以下步骤:
    1.首先获得临时的root权限,因为后面的一些操作需要root权限才可以,打开终端输入以下命令
    sudo -s
    之后直接输入当前账户的密码,就可以获得临时的root权限
    2.先创建root账户的密码:passwd root根据提示输入密码(这里的密码是以后登录root账户时的密码)
    3.修改配置文件,文件路径/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf,这个文件默认没有,需要自己创建,并添加两行信息,命令如下:
    cd /usr/share/lightdm/lightdm.conf.d/
    vi 50-unity-greeter.conf
    greeter-show-manual-login = true
    all-guest = false
    保存退出
    4.去除gdm登陆用户名检测:
    修改/etc/pam.d/gdm-autologin  文件
    vi /etc/pam.d/gdm-autologin
    删除 或注释掉以下语句
    auth required pam_succeed_if.so user != root quiet_success
    修改 /etc/pam.d/gdm-password 文件
    vi /etc/pam.d/gdm-password
    同样删除 或注释掉上面的语句
    5.修改/root/.profile文件
    vi /root/.profile文档最后一行
    mesg n || true 前添加  tty -s && 即修改为:
    tty -s && mesg n || true
    6.重启系统,终端界面输入
    #reboot
    重启完成后,登陆界面选择 “未列出”,之后用户名输入 root 进行登录即可。但是还不能远程登录,需要再执行步骤7.

    7、允许root远程登录
    vi /etc/ssh/sshd_config
    #PermitRootLogin prohibit-password 默认只有这一行,在这一行下面添加下面这一行信息
    PermitRootLogin yes
    重启ssh服务,service ssh restart 即可进行远程登录了。

    linux企业应用

    Netstat 中 Recv-Q和Send-Q状态

    运行netstat -anp发现recv-q 和 send-q 状态不是很正常,对这2个参数不了解,特意学习了一下,简单总结如下:

    recv-Q 表示网络接收队列
    表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()
    如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。

    send-Q 表示网路发送队列
    对方没有收到的数据或者说没有Ack的,还是本地缓冲区.
    如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。

    这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。

    从运行netstat -anp中可以看到是大量的 send-Q ,可以判定是发送数据给目的地址的时候出现了阻塞的问题,导致了包堆积在本地缓存中,不能成功发出去。那么问题就产生在了客户端,根据公司的业务逻辑发现是客户端发送的TCP长连接数量过多。验证办法,尝试减少客户端和服务的长连接.查看效果

    linux企业应用

    failed to load selinux policy,freezing错误修复

    今天一个客户说两台centos7.2系统的服务器修改配置文件,重启后连接不上了。在系统界面,按ESC键,在启动界面,看到!!!!failed to load selinux policy,freezing,还好,知道是修改SELINUX配置文件引起的。
    处理过程如下:
    1、开机时随便按下键盘,进入内核菜单,选择最上边的项;
    2、定位到 ro(linux 16 or linuxefi)
    3、把ro改成 “rw init=/sysroot/bin/sh”(或者“rw init= /bin/sh”,这是指定shell环境) 完成之后按 “Ctrl+x”, 就进入单用户模式了。
    4、系统出现#后,执行chroot /sysroot/
    5、vi /etc/selinux/config
    查看修改的位置,
    SELINUX=disabled
    SELINUXTYPE=targeted,
    修改错误,保存退出
    6、冷启动系统,系统正常进入。

    linux企业应用

    VMware虚拟机有大量磁盘IO错误的真相!

    症状:
    有一台mysql数据库服务器,启动一会,系统报大量的IO错误,进入数据库,尝试将表导出,导出的速度慢的受不了,在导出的过程中,报数据文件的磁盘IO错误。

    尝试:
    登录同在一个LUN上的虚拟机查看他们的状态,一切正常。将该LUN上的其他虚拟机全部迁走,只留下这台mysql服务器,mysql数据库依然有磁盘IO错误。
    在网上查系统IO错误的问题,数据库IO错误的问题,怀疑系统与数据库版本之间兼容性不行。后来查到这篇文章:
    https://blog.csdn.net/sinat_22679101/article/details/79293979
    赶紧将存储上告警的电池替换。再启动mysql数据库,没有错误了,将表导出的速度也恢复正常。

    控制器电池的作用是存储电源宕掉后,将缓存里的数据写入磁盘。但是电池故障怎么会造成磁盘IO错误呢,以前也遇到过N次电池故障啊,和上层的应用有毛毛关系啊。

    总结:
    如果有io错误,很可能和存储有关!
    控制器的电池会影响cache,但是和IO之间有神马关系。。。求解
    啥东西坏了都先看看线!都在线也未必都好用,真的不好说,是什么原因造成的问题啊。

    linux企业应用

    SecureCRT ssh登录linux 显示connection closed

    今天SecureCRT 登录内网linux机器就提示connection closed,但其他人可以登录,查看了linux机器防火墙没开着,
    查看/etc/hosts.allow ,/etc/hosts.deny 也没有限制。
    后来查到在/etc/ssh/sshd_config 有个默认MaxSessions 限制
    描述:
    MaxSessions
    Specifies the maximum number of open sessions permitted per net-
    work connection.  The default is 10

    默认为10个,由于这台linux服务器在另外一个网段,所以有可能是这个原因。
    试着把MaxSessions 改大了删掉前面的”#”号,
    /etc/init.d/sshd restart
    重启sshd服务后就ok了

    (2)
    之后又复现了 connection closed。
    在重启sshd 服务时,报了一下这样的错
    libz.so.1: failed to map segment from shared object: Permission denied
    其中libz.so.1是一个链接文件, libz是zlib压缩的库,安装这个库后执行了ldconfig
    删除这个libz 库后恢复了正常。

    linux企业应用

    centos7 下rc.local里的命令不执行

    一直没怎么用centos7,今天在rc.local文件里添加一个开始执行的服务,结果开机后服务没有启动,仔细一看,原来rc.local已经变了

    [root@localhost ~]# cat /etc/rc.d/rc.local
    #!/bin/bash
    # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
    #
    # It is highly advisable to create own systemd services or udev rules
    # to run scripts during boot instead of using this file.
    #
    # In contrast to previous versions due to parallel execution during boot
    # this script will NOT be run after all other services.
    #
    # Please […]

    linux企业应用

    两块磁盘挂载到一个磁盘,磁盘空间减少的问题

    今天一个客户非常着急的过来说,数据库服务器挂了,两块硬盘,一块1T,一块500G,系统里看到两个500G的硬盘,所有的数据都没有了。
    客户输入密码进入系统,执行df -h命令,看到/dev/sdb1 和/dev/sdc1 都是500G,使用100多M,正常情况是/dev/sdb1 1T的磁盘使用率90%。
    在征得客户同意的情况下,重启服务器,再次进入系统,执行df -h命令,只有/dev/sdb1,使用率正常,/dev/sdc1没有。
    查看/dev/fstab,没有添加/dev/sdc1的挂载,客户现场添加,命令如下:
    /dev/sdc1    /oracle
    看到这里,我知道问题出在那里了,客户的/dev/sdb1 也挂载到了/oracle目录下,昨天客户格式化/dev/sdc1后,执行命令/mount /dev/sdc1 /oracle了,但是不知道再修改那个文件,所以没有修改/etc/fstab.
    这是第一次碰到将2块硬盘都挂载到一个挂载点,可惜忘记拍照了。

    linux企业应用

    Linux 系统JBD2报错处理

    JBD2是journaling block device 2的缩写,用来实现文件系统的日志功能,是为Ext4文件系统服务的,其实JBD2也可以为其它的文件系统服务,但是目前来说只有Ext4和OCFS2文件系统用它。JBD2作用的原理是在Ext4文件系统把数据提交到驱动前先调用它,JBD2根据系统的不同设置来完成数据或是操作的备份后,再让Ext4系统提交数据,当文件系统把数据写入了设备后,就通过JBD2把刚才数据或是操作备份删除,这样来保证数据的一致性。

    有一台linux服务器出现只读的情况,报错信息如下:
    sd 2:0:0:0:timing out command,waited 180s
    Buffer I/O error on device dm-0,logical block 5864465
    Buffer I/O error on device dm-2,logical block 31490048
    JBD2: I/O error detected when updating journal superblock for dm-2-8.
    sd 2:0:0:0: timing out command,waited 180s
    sd 2:0:0:0: timing out command,waited 180s
    Buffer I/O error on device dm-2,logical block 0
    Buffer I/O error on device dm-0,logical block 6324224
    sd […]

    linux企业应用

    Linux系统开机自检失败处理步骤

    Linux系统开机自检失败,出现Faild信息,比如:
    /dev/sda* : UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY.
    (i.e., without –a or –p options)
    [FAILD]
    ***an error occurred during the file system check.
    ***dropping you to a shell;the system will reboot
    ***when you leave the shell.
    give root password for maintenance
    (or type Control-D to continue):
    意思就是在文件检测的时候发生错误,把你放入一个shell,离开此shell后系统会重新启动。输入root的password进行维护。
    这时假若重启的话,还会把你带回到这个界面。所以输入root账号的密码手动进行文件系统check吧。根据系统提示,使用fsck时不要使用-a和-p这两个参数,比如直接输入:
    fsck /dev/sda2
    系统会检测到文件系统错误,提示修复,fix<y?>,直接回车就可以了,直到修复所有的文件系统错误,并重新回到shell,reboot重启电脑,有时输入reboot不起作用,可以使用ctrl+alt+del重启电脑,或者冷重启,进入系统就可以了。