Error: php56w-common conflicts with php-common-5.3.3-46.el6_6.x86_64

运维 OpenSkill 回复了问题 2 人关注 1 个回复 7052 次浏览 2015-10-08 15:53 来自相关话题

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

编程 OpenSkill 回复了问题 2 人关注 1 个回复 5085 次浏览 2015-10-08 14:09 来自相关话题

Msyql备份之mysqldump介绍

数据库 空心菜 发表了文章 2 个评论 2352 次浏览 2015-10-07 18:40 来自相关话题

一、​备份MYSQL 把一个库导出到一个SQL文件 mysqldump -uroot -ppassword db_name > /data/rh/db_name.sql 备份多个 ...查看全部
一、​备份MYSQL


把一个库导出到一个SQL文件


mysqldump -uroot -ppassword db_name > /data/rh/db_name.sql 

备份多个库(使用-B参数)
-B, --databases Dump several databases. Note the difference in usage; in
this case no tables are given. All name arguments are
regarded as database names. 'USE db_name;' will be
included in the output.
如果需要指定字符集的话,可以使用--default-character-set参数。


备份全部库


mysqldump -uroot -ppassword --all-databases > /data/rh/db_all.sql


备份某个表


mysqldump -uroot -ppassword dbname table_name > /data/rh/table_name.sql


备份某库多个表


mysqldump -uroot -ppassword dbname tb1_name tb2_name > /data/rh/tb1_tab2.sql


备份数据库的表结构


mysqldump -uroot -ppassword -q -d dbname > /data/bakm3310/dbname.sql
-q 就是忽略缓存数据
-d 就是没有数据行信息


导出某库某表的结构


mysqldump -uroot -ppassword -d dbname tbname > /data/rh/tbname.sql


导出某库某表的内容


mysqldump -uroot -ppassword -t dbname tbname > /data/rh/tbname.sql
-t 没有创建表的创建信息
二、恢复数据
有两种恢复方式如下:


第一种


mysql -uroot -ppassword db_name < /data/rh/db_name.sql


第二种


#mysql -u root -ppasword
mysql> use db_name;
mysql> source /data/rh/db_name.sql;

Flask ImportError: No module named XXX问题解决

编程 koyo 发表了文章 0 个评论 5584 次浏览 2015-09-28 19:59 来自相关话题

第一个flask项目,做一个简单的网址导航。部署项目后,浏览器访问报500错误。查看apache日志后,报错如下: [Tue Jan 06 09:58:22 2015] [error] hello world [Tue Jan 06 0 ...查看全部
第一个flask项目,做一个简单的网址导航。部署项目后,浏览器访问报500错误。查看apache日志后,报错如下:
[Tue Jan 06 09:58:22 2015] [error] hello world
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] mod_wsgi (pid=31615): Target WSGI script '/var/www/qianshan/qianshan.wsgi' cannot be loaded as Python module.
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] mod_wsgi (pid=31615): Exception occurred processing WSGI script '/var/www/qianshan/qianshan.wsgi'.
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] Traceback (most recent call last):
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] File "/var/www/qianshan/qianshan.wsgi", line 12, in
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] from qianshan import app as application
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] File "/var/www/qianshan/__init__.py", line 4, in
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] import extras
[Tue Jan 06 09:58:22 2015] [error] [client 112.64.71.131] ImportError: No module named extras
项目结构
qianshan
├── config.ini
├── extraModules.py
├── extras.py
├── __init__.py
├── qianshan.wsgi
├── static
├── templates
├── test.py
└── venv
init.py代码
from flask import Flask
from flask import render_template
import extraModules
import extras#如果没有这句无报错正常运行,只有一些静态资源没拉到,可能是其他问题
import ConfigParser
import codecs
import logging

logging.basicConfig(filename='qianshan.log', level=logging.INFO)
logging.info('Started')

app = Flask(__name__)

logging.info('App established')

@app.route("/")
def index():
return render_template('index.html')
extras.py是实际我想要导入的模块,里面有两个我需要的类;extraModules是测试模块,import extraModules是成功的,apache日志的第一行也打出来了;他们的代码分别如下:
# Filename : extras.py

class Block:
def setNo(self, no):
self.no = int(no)
def getNo(self):
return self.no
def setName(self, name):
self.name = name
def getName(self):
return self.name
def setPriority(self, priority):
self.priority = int(priority)
def getPriority(self):
return self.priority
def setHotKeyAsc(self, hotKeyAsc):
self.hotKeyAsc = hotKeyAsc
def getHotKeyAsc(self):
return self.hotKeyAsc
def setElement(self, equation):
s = equation.split(':')
if(s[0] == 'no'):
self.setNo(s[1])
elif(s[0] == 'name'):
self.setName(s[1])
elif(s[0] == 'priority'):
self.setPriority(s[1])
elif(s[0] == 'hot_key_asc'):
self.setHotKeyAsc(s[1])

class Website:
def setNo(self, no):
self.no = int(no)
def getNo(self):
return self.no
def setName(self, name):
self.name = name
def getName(self):
return self.name
def setUrl(self, url):
self.url = url
def getUrl(self):
return self.url
def setIcon(self, icon):
self.icon = icon
def getIcon(self):
return self.icon
def setBlockNo(self, blockNo):
self.blockNo = int(blockNo)
def setPriority(self, priority):
self.priority = int(priority)
def getPriority(self):
return self.priority
def setHotKeyAsc(self, hotKeyAsc):
self.hotKeyAsc = hotKeyAsc
def getHotKeyAsc(self):
return self.hotKeyAsc
def setElement(self, equation):
s = equation.split(':')
if(s[0] == 'no'):
self.setNo(s[1])
elif(s[0] == 'name'):
self.setName(s[1])
elif(s[0] == 'url'):
self.setUrl(s[1])
elif(s[0] == 'icon'):
self.setIcon(s[1])
elif(s[0] == 'priority'):
self.setPriority(s[1])
elif(s[0] == 'hot_key_asc'):
self.setHotKeyAsc(s[1])

if __name__ == '__main__':
block = Block()
website = Website()
extraModules.py代码如下:
# Filename : extraModules.py
print 'hello world'
其他背景信息:
项目部署在digital ocean的ubuntu12.x主机上,python版本2.7.3.

还请指导下,是不是extras.py有什么地方大意了,小弟新学python不久,请多敲打点拨

谢谢1L和2L前辈的指点啊!白天一直在上课,以下为1月7日晚更新,我把wsgi以及virtual host的配置也发一下,wsgi中是有配置/var/www/qianshan/为sys.path的。

qianshan.wsgi如下:
#!/usr/bin/python
activate_this = '/var/www/qianshan/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import sys
import logging

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,'/var/www/qianshan/')
sys.path.insert(1,'/var/www/')

from qianshan import app as application
application.secret_key = 'Add your secret key'
Virtual Host配置:

ServerName qianshan.co
ServerAdmin spark@qianshan.co
WSGIScriptAlias / /var/www/qianshan/qianshan.wsgi

Order allow,deny
Allow from all

Alias /static /var/www/qianshan/static

Order allow,deny
Allow from all

ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
我会按照1L和2L的方法试试,如果不行再在这里说
 
 
问题解决如下:
 
1.首先确认是文件的权限问题。和import的语法无关。
下图中可以看到目前项目根目录下各个文件的权限,otherModules(就是之前的extras)对root所在的用户组没有读权限。
-rwx------ 1 root root 9091 Jan  3 09:27 config.ini
-rwxr--r-- 1 root root 404 Jan 7 22:58 __init__.py
-rwx------ 1 root root 2316 Jan 7 23:07 otherModules.py
-rwxr--r-- 1 root root 360 Jan 5 23:34 qianshan.wsgi
drwxr-xr-x 2 root root 4096 Jan 3 09:08 static
drwxr-xr-x 2 root root 4096 Jan 3 08:51 templates
-rw-r--r-- 1 root root 262 Jan 7 23:05 testModule.py
-rwx------ 1 root root 1716 Jan 3 09:36 test.py
drwxr-xr-x 6 root root 4096 Jan 3 08:05 venv
chmod调整权限后,权限如下,项目可以正常访问,不再报错
-rwxr--r-- 1 root root 9091 Jan  3 09:27 config.ini
-rwxr--r-- 1 root root 404 Jan 7 22:58 __init__.py
-rwxr--r-- 1 root root 2316 Jan 7 23:07 otherModules.py
-rwxr--r-- 1 root root 360 Jan 5 23:34 qianshan.wsgi
drwxrwxr-x 2 root root 4096 Jan 3 09:08 static
drwxrwxr-x 2 root root 4096 Jan 3 08:51 templates
-rw-r--r-- 1 root root 262 Jan 7 23:05 testModule.py
-rwxr--r-- 1 root root 1716 Jan 3 09:36 test.py
drwxr-xr-x 6 root root 4096 Jan 3 08:05 venv
大体过程就这样!
原文地址:分享原文

服务器中文乱码

运维 空心菜 回复了问题 2 人关注 1 个回复 3660 次浏览 2015-09-28 19:52 来自相关话题

php不重新编译添加模块

编程 空心菜 发表了文章 0 个评论 2745 次浏览 2015-09-27 23:58 来自相关话题

php如何使用第三方软件 本例是: php(mysql_connect()函数)使用mysql(第三方软件). 观察上图,php能使用大量的第三方非php库(典型性 ...查看全部


php如何使用第三方软件


本例是: php(mysql_connect()函数)使用mysql(第三方软件).
pload.png

观察上图,php能使用大量的第三方非php库(典型性是C语言写库), 为了达到此目的,你必须具备两个条件:
条件I. 安装第三方库(软件) 
条件II. 安装了该软件的php扩展
如果只是安装mysql,满足条件I,但是条件II不满足, 为了满足条件二, 我们需要了解php安装扩展的知识.

安装php, 大的方面还可以分为两种方式:
方式1. 将扩展编译到php 
方式2. 将扩展单独编译成动态连接库so文件

方式1的优点是运行速度快,但是为了一个扩展需要重新安装整个php
方式2灵活,但是运行速度稍慢.
windows平台下的php程序员大多只熟悉方式2,因为方式2是windows下安装Php扩展的唯一方式.
之前如果安装了php, 如果没有删除php源码目录,重新进入该目录, 那么此时重新编译运行将采用增量方式,实际上比方式2还更方便些,永远的三步曲:
./configure --prefix=/usr/local/php --with-mysql 
make
make install
有人质疑:
我安装mysql sdk,./configure命令一个–with-mysql就知道我安装的目录,还是有点神奇,难道他全硬盘搜索.h文件? 不是, 如果你用yum方式安装sdk,那么LD_LIBRARY_PATH系统变量就指示了该sdk相关信息 ,如果你使用源码(tar)安装mysql sdk,你的–with-mysql参数不得不像这样: –with-mysql=/your_mysql_sdk_dir/ 来指定了。
 
方式2:
以添加ftp模块为例子:
进入源码目录
#cd php-5.2.8/ext/ftp
运行phpize configure
#/usr/local/php/bin/phpize
编译,指定php-config,留意这里的php-config,不是php.ini
#./configure --with-php-config='/usr/local/php/bin/php-config'
#上面可以添加--enable-ftp,也可以不添加
编译安装
(留意:假如之前有过添加其他模块肯定 要先 make clean ,不然 编译报错。)
#make && make install
生成一个目录来存放扩展的模块
#mkdir /usr/local/php/etc/php/ext
复制ftp.so到模块目次
#cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ftp.so /usr/local/php/etc/ext/
编辑 php.ini文件,指定PHP到哪个目次读模块
#vi /usr/local/php/etc/php.ini
#extension_dir="/usr/local/php/etc/ext"
Load模块
#extension=ftp.so
#保存退出

重启apache,或者其他web服务器
再用/usr/local/php/bin/php -m|grep ftp #验证是否有ftp.so

nginx error_page 404

运维 Ansible 回复了问题 2 人关注 1 个回复 4815 次浏览 2015-09-27 23:48 来自相关话题

Ansible工作原理

运维 空心菜 发表了文章 0 个评论 4222 次浏览 2015-09-27 10:39 来自相关话题

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置 , ...查看全部

Ansible是一款非常简单的IT自动化引擎,可自动执行 云配置配置管理应用程序部署服务内编排和许多其他IT需求。


从第一天开始,Ansible就专为多层部署而设计,它通过描述所有系统之间的相互关系来建模IT基础架构,而不仅仅是一次管理一个系统。


它不使用任何代理程序,也不使用其他自定义安全性基础结构,因此易于部署-最重要的是,它使用一种非常简单的语言(YAML,以Ansible Playbooks的形式)。


高效的架构

Ansible通过连接到节点并向其推出称为Ansible模块的小程序来工作。这些程序被编写为系统所需状态的资源模型。然后,Ansible执行这些模块(默认情况下通过SSH),并在完成后将其删除。


您的模块库可以驻留在任何计算机上,并且不需要服务器,守护程序或数据库。通常,您将使用自己喜欢的终端程序,文本编辑器以及可能的版本控制系统来跟踪内容的更改。


友好的SSH密钥

支持密码,但是带有ssh-agent的SSH密钥是使用Ansible的最佳方法之一。尽管如果您想使用Kerberos,那也很好。很多选择!


不需要root用户登录,您可以以任何用户身份登录,然后以su或sudo身份登录到任何用户。


Ansible的authorized_key模块是使用ansible控制哪些机器可以访问哪些主机的好方法。也可以使用其他选项,例如kerberos或身份管理系统。


ssh-agent bash
ssh-add〜/ .ssh / id_rsa

以简单的文本文件管理库存

默认情况下,Ansible使用一个非常简单的INI文件表示要管理的计算机,该文件将所有受管计算机放入您自己选择的组中。


要添加新计算机,无需使用其他SSL签名服务器,因此,毫无疑问可以确定为什么特定的计算机由于NTP或DNS问题而无法链接。


如果您的基础架构中还有其他来源,Ansible也可以对此进行插件,例如从EC2,Rackspace,OpenStack等来源中绘制库存,组和变量信息。


纯文本清单文件如下:


[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com

一旦列出清单主机,就可以在简单的文本文件(在名为“ group_vars /”或“ host_vars /”的子目录中)中或直接在清单文件中为它们分配变量。


或者,正如已经提到的,使用动态清单从EC2,Rackspace或OpenStack等数据源中提取清单。


使用Ansible AD DOC并发执行任务

有了可用实例后,您可以立即与其进行对话,而无需进行任何其他设置:


ansible all -m ping 
ansible foo.example.com -m yum -a "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"

请注意,我们有权访问基于状态的资源模块以及运行原始命令。这些模块非常易于编写,Ansible附带了许多模块,因此您的大部分工作已经完成。
Ansible包含一个巨大的内置模块工具箱,其中有750多个。


手册:简单而强大的自动化语言

PLaybook可以很好地协调基础结构拓扑的多个部分,并且可以非常详细地控制一次要处理的计算机数量。这是Ansible开始变得最有趣的地方。


Ansible的编排方法是微调的简单方法之一,因为我们相信您的自动化代码对您来说很有意义,而且对于特殊的语法或功能,您应该几乎不需要记住。


这是一本剧本的样子。提醒一下,这仅是预告片-跳至 docs.ansible.com 以获取完整的文档以及所有可能的方法。


---
- hosts: webservers
serial: 5 # update 5 machines at a time
roles:
- common
- webapp
- hosts: content_servers
roles:
- common
- content

例如app_config.yml可能看起来像:


---
- yum: name={{contact.item}} state=installed
with_items:
- app_server
- acme_software


- service: name=app_server state=running enabled=yes


- template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf
notify:
- restart app server

该Ansible文档更加深入探讨了这一点。您还可以做很多事情,包括:


  • 从负载均衡器和监视窗口中取出机器
  • 使用收集到的有关特定服务器的事实,让一台服务器知道所有其他服务器的IP地址-并使用这些服务器动态构建配置文件
  • 设置一些变量并提示其他变量,并设置未设置时的默认值
  • 使用一个命令的结果来决定是否运行另一个命令
  • 有许多先进的可能性,但是很容易上手。

最重要的是,该语言保持可读性和透明性,并且您无需执行诸如声明显式排序关系或使用编程语言编写代码之类的事情。


扩展可扩展性:模块,插件和API

如果您想编写自己的模块,则可以使用任何可返回JSON的语言(Ruby,Python,bash等)编写Ansible模块。库存还可以通过编写与该数据源对话并返回JSON的程序来插入任何数据源。还有各种Python API用于扩展Ansible的连接类型(SSH并非唯一的传输方式),回调(Ansible日志的方式等),甚至用于添加新的服务器端行为。


原文: https://www.ansible.com/overview/how-ansible-works

Ansible介绍

运维 空心菜 发表了文章 0 个评论 4566 次浏览 2015-09-27 10:25 来自相关话题

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。 Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加 ...查看全部

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。


Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的 - 甚至是那些不熟悉程序。


我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。


Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。


Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。


被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。


它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。


我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。

python利用ansible磁盘检测报警

编程 空心菜 发表了文章 0 个评论 3117 次浏览 2015-09-24 15:16 来自相关话题

简单的利用python调用ansible检测内网服务器磁盘,然后报警,看代码吧,写得有点糙,很多地方都没有考虑异常抛出,和处理,暂时能用就行,The following code: #!/usr/bin/env python ...查看全部
python.png


简单的利用python调用ansible检测内网服务器磁盘,然后报警,看代码吧,写得有点糙,很多地方都没有考虑异常抛出,和处理,暂时能用就行,The following code:


#!/usr/bin/env python
# encoding: utf-8
#Author: Lucky chen

import datetime,time,traceback
import smtplib,os,re
import threading
from string import join

def sendmail(subject='', msg='', fromaddr='lucky@hadoope.com', toaddrs=):
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
mail_msg = MIMEMultipart()
mail_msg['Subject'] = subject
mail_msg['From'] = fromaddr
mail_msg['To'] = ','.join(toaddrs)
mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))
#print mail_msg.as_string()
try:
[size=16]# Intranet mail server[/size]
s = smtplib.SMTP('10.3.8.2')
s.sendmail(fromaddr, toaddrs, mail_msg.as_string())
s.quit()
except:
error_result = traceback.format_exc()
print error_result


def check_sendmail(zn,hn):
#The recipient email
mailto_list=['ronghua@139.com', 'lucky@hadoope.com']
f = '%'
mail_content = "host %s %s zone used gt 95%s" % (hn, zn, f)
sub = "online host Disk usage"
sendmail(subject=sub, msg=mail_content, toaddrs=mailto_list)


def check_result(cmd,hname):
resu = os.popen(cmd).read().strip().split()
#print resu
#To obtain / /data zone Pointer to the location
rnum, dnum = resu.index("/") - 1 , resu.index("/data") - 1
[size=16] get root /data zone % num[/size]
rzone, dzone = int(resu[rnum].split('%')[0]), int(resu[dnum].split('%')[0])
#print type(rzone)
#print rzone,dzone,hname

if rzone > 95:
check_sendmail(zn="/",hn=hname)
if dzone > 95:
check_sendmail(zn='/data',hn=hname)

if __name__=='__main__':
[size=16]ansible host list /etc/ansible/hosts[/size]
host=['web1','web2','db1','db2']
for dest in host:
comm = "ansible %s -m shell -a 'df -h'" % (dest)
#print comm
#check_result(cmd=comm,hname=dest)
s = threading.Thread(target = check_result,args = (comm,dest))
s.start()