背景:作者的服务器之前是Windows的后迁移到linux上,发现SQL查询的表在Linux上对大小写敏感,出现找不到该表,如何不改变服务器的表名称为对应的小写或代码改大写就能做到呢,改下my.cnf即可做到,如下摘录。
为什么在Windows能正常运行的程序和数据库,在Linux就会出现问题呢。这时一般会怀疑系统环境的问题,因为程序和数据库是一样的。
然而其实是英文字母大小写导致的结果。
比如在首页调取数据库数据的SQL文如下。
SELECT user_name,id from User;
User表在Windows系统上的Table名为user,因为不区别英文字母大小写所以没问题。
而在Linux会怎么样呢?
迁移过来的Table名是user,而在SQL文里指定的是User表。别忘了这家伙(Linux)区别英文字母大小写,因此会提示该表(User表)不存在。
解决方法
大概有3种解决方法,第一个是修改数据库的Table名,第二个是修改程序,第三个是修改MySQL的参数。
第一和第二,就无需多做说明了,而第三种方法是利用MySQL参数lower_case_table_names。
lower_case_table_names
参数lower_case_table_names是,在MySQL里怎么区别Table英文字母大小的,默认是0。
0:区别大小写1:不区别大小写(Table名以小写保存)2:不区别大小写(Table名以原来的大小写保存)
这样一来就简单了,可以让MySQL不区别Table名的大小写。在/etc/my.cnf(yum安装时的默认路径)文件的[mysqld]下面添加lower_case_table_names = 1就可以了。
[mysqld]
...
lower_case_table_names = 1
...
修改MySQL参数之后,重启一下数据库。
来自:http://m.toutiao.com/i6223691155964428802/?tt_from=android_share&iid=3283494589&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
为什么在Windows能正常运行的程序和数据库,在Linux就会出现问题呢。这时一般会怀疑系统环境的问题,因为程序和数据库是一样的。
然而其实是英文字母大小写导致的结果。
比如在首页调取数据库数据的SQL文如下。
SELECT user_name,id from User;
User表在Windows系统上的Table名为user,因为不区别英文字母大小写所以没问题。
而在Linux会怎么样呢?
迁移过来的Table名是user,而在SQL文里指定的是User表。别忘了这家伙(Linux)区别英文字母大小写,因此会提示该表(User表)不存在。
解决方法
大概有3种解决方法,第一个是修改数据库的Table名,第二个是修改程序,第三个是修改MySQL的参数。
第一和第二,就无需多做说明了,而第三种方法是利用MySQL参数lower_case_table_names。
lower_case_table_names
参数lower_case_table_names是,在MySQL里怎么区别Table英文字母大小的,默认是0。
0:区别大小写1:不区别大小写(Table名以小写保存)2:不区别大小写(Table名以原来的大小写保存)
这样一来就简单了,可以让MySQL不区别Table名的大小写。在/etc/my.cnf(yum安装时的默认路径)文件的[mysqld]下面添加lower_case_table_names = 1就可以了。
[mysqld]
...
lower_case_table_names = 1
...
修改MySQL参数之后,重启一下数据库。
来自:http://m.toutiao.com/i6223691155964428802/?tt_from=android_share&iid=3283494589&app=news_article&utm_medium=toutiao_android&utm_campaign=client_share
PHP7 now is GA,GA是啥意思?
Php/Js/Shell/Go jackx 2015-12-4 07:54
背景:说WordPress提升了229%,我怎么没有察觉到呢?不管怎么样,GA了。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:贾旭
链接:http://www.zhihu.com/question/20790599/answer/16225807
来源:知乎
GA:General Availability(正式发布的版本)在国外都是用GA来说明release版本的
其他的还有:
RC 0版。是 0Release 0Candidate 0的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的 BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从
Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。
Final:正式版。
摘录自邮件:
PHP 7.0 also uses much less memory thanks to the compact data structures and the highly-refactored codebase of Zend Engine 3.0. Memory consumption gains between 30% and 50% are commonly realized, allowing you to serve more concurrent users without adding additional server hardware.
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:贾旭
链接:http://www.zhihu.com/question/20790599/answer/16225807
来源:知乎
GA:General Availability(正式发布的版本)在国外都是用GA来说明release版本的
其他的还有:
RC 0版。是 0Release 0Candidate 0的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的 BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从
Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。
Final:正式版。
摘录自邮件:
PHP 7.0 also uses much less memory thanks to the compact data structures and the highly-refactored codebase of Zend Engine 3.0. Memory consumption gains between 30% and 50% are commonly realized, allowing you to serve more concurrent users without adding additional server hardware.
PHP7 now is GA,GA是啥意思?
Php/Js/Shell/Go jackx 2015-12-4 07:54
背景:说WordPress提升了229%,我怎么没有察觉到呢?不管怎么样,GA了。
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:贾旭
链接:http://www.zhihu.com/question/20790599/answer/16225807
来源:知乎
GA:General Availability(正式发布的版本)在国外都是用GA来说明release版本的
其他的还有:
RC 0版。是 0Release 0Candidate 0的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的 BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从
Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。
Final:正式版。
摘录自邮件:
PHP 7.0 also uses much less memory thanks to the compact data structures and the highly-refactored codebase of Zend Engine 3.0. Memory consumption gains between 30% and 50% are commonly realized, allowing you to serve more concurrent users without adding additional server hardware.
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:贾旭
链接:http://www.zhihu.com/question/20790599/answer/16225807
来源:知乎
GA:General Availability(正式发布的版本)在国外都是用GA来说明release版本的
其他的还有:
RC 0版。是 0Release 0Candidate 0的缩写,意思是发布倒计时,候选版本,处于Gamma阶段,该版本已经完成全部功能并清除大部分的 BUG。到了这个阶段只会除BUG,不会对软件做任何大的更改。从
Alpha到Beta再到Gamma是改进的先后关系,但RC1、RC2往往是取舍关系。
Final:正式版。
摘录自邮件:
PHP 7.0 also uses much less memory thanks to the compact data structures and the highly-refactored codebase of Zend Engine 3.0. Memory consumption gains between 30% and 50% are commonly realized, allowing you to serve more concurrent users without adding additional server hardware.
wordpress的后台,当时我装过hhvm,感觉还成,传图片后切割处理这块的库好像不太支持,于是一直等待7,
装过hhvm, 感觉比它强,只是第一次慢点,后面老快到毫秒级别,那是相当顺畅,第一次访问慢可以接受的,
用户体验(特别强调后台操作流畅度的体验)感觉不如hhvm,只是兼容性可能好些吗?这块可能是太期望了:

鸟哥这篇文章的数据,好像在我的这台vps上的用户体验上没有表现出来:
http://www.laruence.com/2014/12/18/2976.html
附录:
http://blog.bingxuecandong.com/?p=239
按大陆北京的鸟哥优化都优化了,感觉还是慢,难道是我vps慢?
http://jackxiang.com/post/8378/
装过hhvm, 感觉比它强,只是第一次慢点,后面老快到毫秒级别,那是相当顺畅,第一次访问慢可以接受的,
用户体验(特别强调后台操作流畅度的体验)感觉不如hhvm,只是兼容性可能好些吗?这块可能是太期望了:
鸟哥这篇文章的数据,好像在我的这台vps上的用户体验上没有表现出来:
http://www.laruence.com/2014/12/18/2976.html
附录:
http://blog.bingxuecandong.com/?p=239
按大陆北京的鸟哥优化都优化了,感觉还是慢,难道是我vps慢?
http://jackxiang.com/post/8378/
centos7 如何刷新dns缓存
Unix/LinuxC技术 jackx 2015-12-3 10:42
centos7 如何刷新本地的DNS缓存
1)方法一:
[root@fl2 ~]# ping dl.z.com
ping: unknown host dl.z.com
[root@fl2 ~]# /etc/rc.d/init.d/nscd restart
-bash: /etc/rc.d/init.d/nscd: No such file or directory
[root@fl2 ~]# /etc/rc.d/nscd restart
-bash: /etc/rc.d/nscd: No such file or directory
[root@fl2 ~]#
centos7 dns
2)方法二:
centos 7 已经用systemd 了,
试试 systemctl restart nscd。
From:http://segmentfault.com/q/1010000002925549/a-1020000002925718
1)方法一:
[root@fl2 ~]# ping dl.z.com
ping: unknown host dl.z.com
[root@fl2 ~]# /etc/rc.d/init.d/nscd restart
-bash: /etc/rc.d/init.d/nscd: No such file or directory
[root@fl2 ~]# /etc/rc.d/nscd restart
-bash: /etc/rc.d/nscd: No such file or directory
[root@fl2 ~]#
centos7 dns
2)方法二:
centos 7 已经用systemd 了,
试试 systemctl restart nscd。
From:http://segmentfault.com/q/1010000002925549/a-1020000002925718
PHP的普罗米修斯--"Swoole"项目--思维转换之前篇
Php/Js/Shell/Go jackx 2015-12-2 14:42
背景:swoole的出现,其背景是带有腾讯mongo和rango,mongo曾经在腾达30楼(想不起了)传PHP道时,见过半面,问过一个问题,rango兄弟出来后带着其思想重新写了swoole,于是,swoole主要思想和之前的pws有一部分相同,但其更主要用在嵌入式的长连接这块,其省掉了rinit这块在高并发的性能上更高一些,但变量上不能运行完销毁导致不能定相同变量,这块追求性能是要有代价的。
众所周知,传统的 PHP 应用程序有 Request Startup 和 Request Shutdown 的生命周期,所有的对象在请求后都将销毁,而 Blink 于此不同, Blink 许多对象都能留存与多个请求之间,减少对象反复创建销毁的性能损失。
摘自:http://www.oschina.net/p/blink-framework
作为swoole的顾问(故得上就细问,顾不上就问一下),我想swoole的开源思想比技术可能更重要,未来swoole的方面可能会向linux裁剪下的内存小于8M的上面作一定程度的倾斜,用在非常小的cpu和路由上,以php为界面操作路由,联网控制长连为基础,把体积变更小,更省硬件成本。
http://mp.weixin.qq.com/s?__biz=MzI2OTA5NTM2Mg==&mid=400981627&idx=1&sn=1367db94644ff7f28e29971abde433d1
众所周知,传统的 PHP 应用程序有 Request Startup 和 Request Shutdown 的生命周期,所有的对象在请求后都将销毁,而 Blink 于此不同, Blink 许多对象都能留存与多个请求之间,减少对象反复创建销毁的性能损失。
摘自:http://www.oschina.net/p/blink-framework
作为swoole的顾问(故得上就细问,顾不上就问一下),我想swoole的开源思想比技术可能更重要,未来swoole的方面可能会向linux裁剪下的内存小于8M的上面作一定程度的倾斜,用在非常小的cpu和路由上,以php为界面操作路由,联网控制长连为基础,把体积变更小,更省硬件成本。
http://mp.weixin.qq.com/s?__biz=MzI2OTA5NTM2Mg==&mid=400981627&idx=1&sn=1367db94644ff7f28e29971abde433d1
背景:微信浏览器能访问,出现,请在微信客户端打开链接。
user agent switcher for firefox:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
FF越来越不行了,下载都下载不下来~
user agent switcher1.0.34中文版for chrome:
http://www.pc6.com/soft/FireFox_133175.html
http://bbs.kafan.cn/thread-1712463-1-1.html
Chrome的在扩展里拖动安装后,在右上出现一个戴眼镜的人,
使用方法:
输入粘贴的URL,微信浏览器能访问不让进时,点右边那个戴眼镜的人换成IOS或Android的,也就是修改头的chrome重新发起了http头,就Ok了。
还是不行啊,那就在右边那个戴眼镜的头像上给右键->选项->自己模拟下能过得去的http头。
最简单办法:
右击桌面上的Chrome浏览器快捷图标,在弹出的右键菜单中选择“属性”,打开相应的对话框,在“目标”文本框的字符后面添加以下语句:“–user-agent=”Android””或“–user-agent=”iPhone””,需注意在“chrome.exe”与“–user”之间有一个空格,然后确定双击打开就成手机版了。如需恢复电脑版,改回即可。
什么,还不行?找到原因是开启了网页授权用户基本信息,是不是用户需要微信登录标识,这得要模拟cookie啥的了,和浏览器头无关了。
———————————————————————————————————————————————————————————————
火狐浏览器模拟微信浏览器内核教程 :
http://blog.csdn.net/qwangwei1231/article/details/40980281
首先,下载火狐浏览器的User Agent Switcher 插件,下载地址:https://addons.mozilla.org/zh-CN/firefox/addon/user-agent-switcher/ 插件如图:
笔者用自己的GT-I9300获取的agent为:Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
http://archives.guao.hk/posts/chrome-extension-chromeleon-user-agent-spoofer.html
现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动。
微信浏览器中打开网页游戏效果还不错,对手机要求不高,而且微信网页游戏不用考虑手机兼容性问题,采用html5,而且大部分手机浏览器,特别是微信浏览器对html5的支持很高。
怎么把别人的微信网页游戏移植到自己的网站上并分享给好友呢?
许多网站的微信网页游戏都设置了判断浏览器,只有使用微信浏览器打开才能访问,这使我们在电脑上打开网址找不到源代码。方法很简单,我们可以伪造微信浏览器HTTP_USER_AGENT,从而在pc上可以访问,这样就可以获取你想要的css,js,html等资源,移植到自己的网站上。
如何伪造微信浏览器HTTP_USER_AGENT
使用谷歌浏览器非常方便伪造微信浏览器HTTP_USER_AGENT,打开你需要伪造HTTP_USER_AGENT的网页,按F12,进入开发者模式,下面默认是显示css调试的工具,你找到下面一排,有个图片所示的地方:
用谷歌浏览器如何伪造微信浏览器HTTP_USER_AGENT
用谷歌浏览器伪造微信浏览器HTTP_USER_AGENT
这里有一个模拟器,既可以设置模拟很多型号的手机设备,也可以伪造你想要的HTTP_USER_AGENT。选择USER_AGENT,选other,微信的HTTP_USER_AGENT是:
在iPhone下,返回
Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B176 MicroMessenger/4.3.2
在Android下,返回
Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.255
经过这样的设置之后,你刷新就可以访问之前不能访问的网页了,现在你就是伪装成微信浏览器访问,同时你使用谷歌浏览器查看源代码,就可以找到资源的路径了。
user agent switcher for firefox:
https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/
FF越来越不行了,下载都下载不下来~
user agent switcher1.0.34中文版for chrome:
http://www.pc6.com/soft/FireFox_133175.html
http://bbs.kafan.cn/thread-1712463-1-1.html
Chrome的在扩展里拖动安装后,在右上出现一个戴眼镜的人,
使用方法:
输入粘贴的URL,微信浏览器能访问不让进时,点右边那个戴眼镜的人换成IOS或Android的,也就是修改头的chrome重新发起了http头,就Ok了。
还是不行啊,那就在右边那个戴眼镜的头像上给右键->选项->自己模拟下能过得去的http头。
最简单办法:
右击桌面上的Chrome浏览器快捷图标,在弹出的右键菜单中选择“属性”,打开相应的对话框,在“目标”文本框的字符后面添加以下语句:“–user-agent=”Android””或“–user-agent=”iPhone””,需注意在“chrome.exe”与“–user”之间有一个空格,然后确定双击打开就成手机版了。如需恢复电脑版,改回即可。
什么,还不行?找到原因是开启了网页授权用户基本信息,是不是用户需要微信登录标识,这得要模拟cookie啥的了,和浏览器头无关了。
———————————————————————————————————————————————————————————————
火狐浏览器模拟微信浏览器内核教程 :
http://blog.csdn.net/qwangwei1231/article/details/40980281
首先,下载火狐浏览器的User Agent Switcher 插件,下载地址:https://addons.mozilla.org/zh-CN/firefox/addon/user-agent-switcher/ 插件如图:
笔者用自己的GT-I9300获取的agent为:Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
http://archives.guao.hk/posts/chrome-extension-chromeleon-user-agent-spoofer.html
现在很流行微信网页小游戏,用html5制作的小游戏移过来,可以放到微信浏览器中打开,关键是可以做成微信分享朋友圈的形式,大大提高游戏的传播,增强好友的游戏互动。
微信浏览器中打开网页游戏效果还不错,对手机要求不高,而且微信网页游戏不用考虑手机兼容性问题,采用html5,而且大部分手机浏览器,特别是微信浏览器对html5的支持很高。
怎么把别人的微信网页游戏移植到自己的网站上并分享给好友呢?
许多网站的微信网页游戏都设置了判断浏览器,只有使用微信浏览器打开才能访问,这使我们在电脑上打开网址找不到源代码。方法很简单,我们可以伪造微信浏览器HTTP_USER_AGENT,从而在pc上可以访问,这样就可以获取你想要的css,js,html等资源,移植到自己的网站上。
如何伪造微信浏览器HTTP_USER_AGENT
使用谷歌浏览器非常方便伪造微信浏览器HTTP_USER_AGENT,打开你需要伪造HTTP_USER_AGENT的网页,按F12,进入开发者模式,下面默认是显示css调试的工具,你找到下面一排,有个图片所示的地方:
用谷歌浏览器如何伪造微信浏览器HTTP_USER_AGENT
用谷歌浏览器伪造微信浏览器HTTP_USER_AGENT
这里有一个模拟器,既可以设置模拟很多型号的手机设备,也可以伪造你想要的HTTP_USER_AGENT。选择USER_AGENT,选other,微信的HTTP_USER_AGENT是:
在iPhone下,返回
Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B176 MicroMessenger/4.3.2
在Android下,返回
Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.255
经过这样的设置之后,你刷新就可以访问之前不能访问的网页了,现在你就是伪装成微信浏览器访问,同时你使用谷歌浏览器查看源代码,就可以找到资源的路径了。
背景:一外包项目其字段名为order,且是字符串,还order by order,这样的一个搞法,为此,这块Mysql通过sql排序是有问题的,因为里面存的是整数,这块直接修改表为整数也就Ok了。
MySQL字符串相信大家都不陌生,在MySQL字符串排序时经常会遇到一些问题,比如下面的这
今天解决了一个关于MySQL字符串排序的很奇怪的问题,在数据里面定义的是varchar类型,实际存放的是Int类型的数据,按一下查询语句进行排序:
将字段*1或者+0可以将MySQL字符串字段按数值排序
如:
select * from table where 1 order by id*1 desc;
或者
select * from table where 1 order by id+0 desc;
除了上述方法外,这里附上一种排序方法,利用find_in_set()进行无敌排序
附上Mysql函数 find_in_set() 的用法:
-------------------------------------------------------
举个例子来说:
有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等
现在有篇文章他既是 头条,又是热点,还是图文,
type中以 1,3,4的格式存储.
们我们如何用sql查找所有type中有4图文标准的文章呢??
这就要我们的find_in_set出马的时候到了.
以下为引用的内容:
select * from article where FIND_IN_SET('4',type)
FIND_IN_SET(str,strlist)
Returns a value 如果字符串 str 在由 N 个子串组成的列表 strlist 中,返回一个 1 到 N 的值。一个字符串列表是由通过字符 “,” 分隔的多个子串组成。如果第一个参数是一个常数字符串,并且第二个参数是一个 SET 列类型,FIND_IN_SET() 函数将被优化为使用位运算!如果 str 在不 strlist 中或者如果 strlist 是一个空串,返回值为 0。如果任何一个参数为 NULL,返回值也是 NULL。如果第一个参数包含一个 “,”,这个函数将完全不能工作:
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
for example:
$sql = "select p.*, find_in_set(p.products_id,$string_hot_pid) as rank from products p where p.products_id in ($string_hot_pid) order by rank";
大家有什么好的想法和建议可以留下宝贵的意见 以便共同进步
来自:http://www.cnblogs.com/yhyjy/archive/2012/07/25/2607818.html
http://1055592535.iteye.com/blog/1674734
MySQL字符串相信大家都不陌生,在MySQL字符串排序时经常会遇到一些问题,比如下面的这
今天解决了一个关于MySQL字符串排序的很奇怪的问题,在数据里面定义的是varchar类型,实际存放的是Int类型的数据,按一下查询语句进行排序:
将字段*1或者+0可以将MySQL字符串字段按数值排序
如:
select * from table where 1 order by id*1 desc;
或者
select * from table where 1 order by id+0 desc;
除了上述方法外,这里附上一种排序方法,利用find_in_set()进行无敌排序
附上Mysql函数 find_in_set() 的用法:
-------------------------------------------------------
举个例子来说:
有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等
现在有篇文章他既是 头条,又是热点,还是图文,
type中以 1,3,4的格式存储.
们我们如何用sql查找所有type中有4图文标准的文章呢??
这就要我们的find_in_set出马的时候到了.
以下为引用的内容:
select * from article where FIND_IN_SET('4',type)
FIND_IN_SET(str,strlist)
Returns a value 如果字符串 str 在由 N 个子串组成的列表 strlist 中,返回一个 1 到 N 的值。一个字符串列表是由通过字符 “,” 分隔的多个子串组成。如果第一个参数是一个常数字符串,并且第二个参数是一个 SET 列类型,FIND_IN_SET() 函数将被优化为使用位运算!如果 str 在不 strlist 中或者如果 strlist 是一个空串,返回值为 0。如果任何一个参数为 NULL,返回值也是 NULL。如果第一个参数包含一个 “,”,这个函数将完全不能工作:
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
for example:
$sql = "select p.*, find_in_set(p.products_id,$string_hot_pid) as rank from products p where p.products_id in ($string_hot_pid) order by rank";
大家有什么好的想法和建议可以留下宝贵的意见 以便共同进步
来自:http://www.cnblogs.com/yhyjy/archive/2012/07/25/2607818.html
http://1055592535.iteye.com/blog/1674734
[实践OK]Linux /FreeBSD踢掉终端里登录连接上的ssh用户办法。
Unix/LinuxC技术 jackx 2015-10-28 09:44
背景:可能电脑是办工环境,你现在在外面用手机连接上linux上的ssh,又想这个时候关掉在PC登录连接上的ssh,怎么办?
Linux系统root用户可强制踢制其它登录用户,首先以root登录以便查看全部的在线用户信息,可用 w 或者 who 命令查看用户所在的终端。
强制踢人命令格式:pkill -kill -t pts
解释:
pkill -kill -t 踢人命令
tty 所踢用户的TTY
如上踢出tty1用户的命令为: pkill -kill -t pts/4
用户已经被强制踢掉了
实践如下:
1)谁还在用ssh连接到本linux上?
[root@iZ25dcp92ckZ ~]# w
17:52:38 up 118 days, 1:38, 5 users, load average: 2.01, 2.02, 2.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 202.108.16.80 09:36 2:45m 1:36 0.34s -bash
root pts/1 202.108.16.80 09:36 2:45m 0.19s 0.19s -bash
root pts/3 202.108.16.80 09:36 2:45m 0.26s 0.26s -bash
root pts/9 202.108.16.80 09:40 3:48m 0.11s 0.11s -bash
2)根据1作pkill操作,自己的ssh连接得留下:
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/0
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/1
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/3
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/9
3)确认已经把pc的ssh连接杀死并Ok了:
[root@iZ25dcp92ckZ ~]# w
17:53:21 up 118 days, 1:39, 1 user, load average: 1.44, 1.89, 2.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/10 117.136.0.88 17:32 1.00s 0.05s 0.00s w
[root@iZ25dcp92ckZ ~]#
Freebsd一样的: last
root pts/12 111.199.58.196 Wed Oct 11 22:40 still logged in
root pts/11 111.199.58.196 Wed Oct 11 22:38 still logged in
root pts/10 111.199.58.196 Wed Oct 11 22:34 still logged in
root pts/9 111.199.58.196 Wed Oct 11 22:29 still logged in
root pts/8 111.199.58.196 Wed Oct 11 22:28 still logged in
root pts/7 111.199.58.196 Wed Oct 11 22:16 still logged in
root pts/1 111.199.58.196 Wed Oct 11 22:16 still logged in
root pts/6 111.199.58.196 Wed Oct 11 22:06 still logged in
root pts/0 111.199.58.196 Wed Oct 11 22:05 still logged in
root pts/5 111.199.58.196 Wed Oct 11 21:48 still logged in
root pts/4 111.199.58.196 Wed Oct 11 21:04 still logged in
root pts/3 111.199.58.196 Wed Oct 11 21:03 still logged in
root pts/2 111.199.58.196 Wed Oct 11 20:57 still logged in
踢掉命令:
pkill -kill -t pts/12
pkill -kill -t pts/11
pkill -kill -t pts/10
pkill -kill -t pts/9
pkill -kill -t pts/8
pkill -kill -t pts/7
pkill -kill -t pts/1
pkill -kill -t pts/6
pkill -kill -t pts/0
pkill -kill -t pts/5
pkill -kill -t pts/4
pkill -kill -t pts/3
pkill -kill -t pts/2
Linux系统root用户可强制踢制其它登录用户,首先以root登录以便查看全部的在线用户信息,可用 w 或者 who 命令查看用户所在的终端。
强制踢人命令格式:pkill -kill -t pts
解释:
pkill -kill -t 踢人命令
tty 所踢用户的TTY
如上踢出tty1用户的命令为: pkill -kill -t pts/4
用户已经被强制踢掉了
实践如下:
1)谁还在用ssh连接到本linux上?
[root@iZ25dcp92ckZ ~]# w
17:52:38 up 118 days, 1:38, 5 users, load average: 2.01, 2.02, 2.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 202.108.16.80 09:36 2:45m 1:36 0.34s -bash
root pts/1 202.108.16.80 09:36 2:45m 0.19s 0.19s -bash
root pts/3 202.108.16.80 09:36 2:45m 0.26s 0.26s -bash
root pts/9 202.108.16.80 09:40 3:48m 0.11s 0.11s -bash
2)根据1作pkill操作,自己的ssh连接得留下:
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/0
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/1
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/3
[root@iZ25dcp92ckZ ~]# pkill -kill -t pts/9
3)确认已经把pc的ssh连接杀死并Ok了:
[root@iZ25dcp92ckZ ~]# w
17:53:21 up 118 days, 1:39, 1 user, load average: 1.44, 1.89, 2.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/10 117.136.0.88 17:32 1.00s 0.05s 0.00s w
[root@iZ25dcp92ckZ ~]#
Freebsd一样的: last
root pts/12 111.199.58.196 Wed Oct 11 22:40 still logged in
root pts/11 111.199.58.196 Wed Oct 11 22:38 still logged in
root pts/10 111.199.58.196 Wed Oct 11 22:34 still logged in
root pts/9 111.199.58.196 Wed Oct 11 22:29 still logged in
root pts/8 111.199.58.196 Wed Oct 11 22:28 still logged in
root pts/7 111.199.58.196 Wed Oct 11 22:16 still logged in
root pts/1 111.199.58.196 Wed Oct 11 22:16 still logged in
root pts/6 111.199.58.196 Wed Oct 11 22:06 still logged in
root pts/0 111.199.58.196 Wed Oct 11 22:05 still logged in
root pts/5 111.199.58.196 Wed Oct 11 21:48 still logged in
root pts/4 111.199.58.196 Wed Oct 11 21:04 still logged in
root pts/3 111.199.58.196 Wed Oct 11 21:03 still logged in
root pts/2 111.199.58.196 Wed Oct 11 20:57 still logged in
踢掉命令:
pkill -kill -t pts/12
pkill -kill -t pts/11
pkill -kill -t pts/10
pkill -kill -t pts/9
pkill -kill -t pts/8
pkill -kill -t pts/7
pkill -kill -t pts/1
pkill -kill -t pts/6
pkill -kill -t pts/0
pkill -kill -t pts/5
pkill -kill -t pts/4
pkill -kill -t pts/3
pkill -kill -t pts/2
背景:我的T60P机器是老了还是啥的,开机假死发生多次,强制关机后重启正常,怀疑过固态硬盘,怀疑过风扇FanError,换了个风扇依旧,于是查了下开机日志,发现大量的acpi的警告:警告 2015/10/27 星期二 23:49:44 ACPI 15 无。。。。。于是,解决办法如下:
系统城的小编这里要跟大家分享的是关于如何在BIOS中关闭ACPI的方法,ACPI表示高级配置和接口(Advanced Configuration and Power Management Interface),帮助操作系统控制划拨给每一件与计算机相连的设备的电量,有了ACPI,操作系统就可以把不同的外设关闭。但是针对有些用户在安装系统的时候会出现假死的现象,因此有大神建议先关闭ACPI即可解决问题!
电脑如何进入BIOS设置
win7系统如何关闭ACPI:
开机按del键,找到Advanced Configuration and Power Interface即可关闭。
win7系统如何关闭ACPI
开机后如发现设备栏中有黄色惊叹号,未知设备,可以打开系统光盘,把power manegement目录下的setup.exe执行一下,惊叹号就没有了!
来自:http://www.xitongcheng.com/jiaocheng/win7_article_1687.html
====================================================================================
通过----windows系统日志----查看开关机时间:
(1)
在“开始”菜单的“运行”中输入“eventvwr.msc”,打开事件查看器,在左侧窗口中选择Windows日志->“系统”,从右侧系统事件中查找事件ID为6005、6006的事件
事件ID:6005表示事件日志服务已启动,即开机
事件ID:6006表示关机。它们对应的时间就分别是开机时间和关机时间
简单点
还你可以使用“筛选”使内容简洁。在事件查看器的“查看”菜单中选择“筛选”选项,在属性对话框中选择“筛选器”选项卡,并在其中勾选“信息”、“警告”、“错误”三项,在“事件来源”下拉列表中选择“eventlog”,单击“确定”按钮后,系统事件中的内容就少了很多,可以轻易找到最近的开关机时间。
(2)
在“开始”菜单中的“运行”中输入“C:\WINDOWS\schedlgu.txt”,在打开的schedlgu.txt文件中有“任务计划程序服务”已启动于和“任务计划程序服务”已退出于的时间,分别对应着开机和关机时间
来自:http://blog.sina.com.cn/s/blog_518b64290100fewh.html
错误 2015/10/28 星期三 0:22:28 SharedAccess_NAT 34001 无,
看看windows firewall服务是不是被禁用了,原来 是NOD32会接管Windows系统自带的防火墙。
http://bbs.kafan.cn/thread-1691369-1-1.html
系统城的小编这里要跟大家分享的是关于如何在BIOS中关闭ACPI的方法,ACPI表示高级配置和接口(Advanced Configuration and Power Management Interface),帮助操作系统控制划拨给每一件与计算机相连的设备的电量,有了ACPI,操作系统就可以把不同的外设关闭。但是针对有些用户在安装系统的时候会出现假死的现象,因此有大神建议先关闭ACPI即可解决问题!
电脑如何进入BIOS设置
win7系统如何关闭ACPI:
开机按del键,找到Advanced Configuration and Power Interface即可关闭。
win7系统如何关闭ACPI
开机后如发现设备栏中有黄色惊叹号,未知设备,可以打开系统光盘,把power manegement目录下的setup.exe执行一下,惊叹号就没有了!
来自:http://www.xitongcheng.com/jiaocheng/win7_article_1687.html
====================================================================================
通过----windows系统日志----查看开关机时间:
(1)
在“开始”菜单的“运行”中输入“eventvwr.msc”,打开事件查看器,在左侧窗口中选择Windows日志->“系统”,从右侧系统事件中查找事件ID为6005、6006的事件
事件ID:6005表示事件日志服务已启动,即开机
事件ID:6006表示关机。它们对应的时间就分别是开机时间和关机时间
简单点
还你可以使用“筛选”使内容简洁。在事件查看器的“查看”菜单中选择“筛选”选项,在属性对话框中选择“筛选器”选项卡,并在其中勾选“信息”、“警告”、“错误”三项,在“事件来源”下拉列表中选择“eventlog”,单击“确定”按钮后,系统事件中的内容就少了很多,可以轻易找到最近的开关机时间。
(2)
在“开始”菜单中的“运行”中输入“C:\WINDOWS\schedlgu.txt”,在打开的schedlgu.txt文件中有“任务计划程序服务”已启动于和“任务计划程序服务”已退出于的时间,分别对应着开机和关机时间
来自:http://blog.sina.com.cn/s/blog_518b64290100fewh.html
错误 2015/10/28 星期三 0:22:28 SharedAccess_NAT 34001 无,
看看windows firewall服务是不是被禁用了,原来 是NOD32会接管Windows系统自带的防火墙。
http://bbs.kafan.cn/thread-1691369-1-1.html
linux下怎样删除以横线开关的文件
Unix/LinuxC技术 jackx 2015-10-23 17:16
背景:在写代码程序里写文件时不小心出现了一个带横线的文件,如下:
[root@iZ25dcp92ckZ temp]# ls
-000 84b1052c-ebc5-11e4-bf9b-b9856d949d58-002.mp4
[root@iZ25dcp92ckZ temp]# ll -i
总用量 58140
1211764 -rw-r--r-- 1 48 root 0 10月 23 17:14 -000
1187168 -rw-r--r-- 1 48 root 11904973 10月 23 17:14 84b1052c-ebc5-11e4-bf9b-b9856d949d58-002.mp4
干掉它:
find . -inum 1211764 -exec rm {} \;
————————————————————————————————————————————
linux下怎样删除以横线开关的文件:
一些客户用FTP上传了一些以横线开关的文件,然后需要删除或改名时都不能操作.所以很苦恼.
在删除时报以下错误:
以下是解决方法:
1.首先以ll -i 查看下文件的inode值.
2.有以下命令删除或改名此类文件:
find 命令
使用 UNIX find 命令,您可以完成使用 ls 命令所开始的工作。对于要进行操作的文件,您已经知道了它们的索引编号,那么就可以开始进行相应的操作了!
要删除看似无名的文件,您只需要使用 find 和 -inum 开关对索引编号和文件进行定位。然后,在找到该文件之后,使用 find 和 -exec 开关删除该文件:
# find . -inum 393228 -exec rm {} \;
要对该文件进行重命名或删除,可以使用 mv 或 rm:
删除文件:
# find . -inum 393228 -exec mv {} passwd.txt \;
重命名文件:
问题解决.
来自:http://blog.chinaunix.net/uid-23683795-id-2391090.html
[root@iZ25dcp92ckZ temp]# ls
-000 84b1052c-ebc5-11e4-bf9b-b9856d949d58-002.mp4
[root@iZ25dcp92ckZ temp]# ll -i
总用量 58140
1211764 -rw-r--r-- 1 48 root 0 10月 23 17:14 -000
1187168 -rw-r--r-- 1 48 root 11904973 10月 23 17:14 84b1052c-ebc5-11e4-bf9b-b9856d949d58-002.mp4
干掉它:
find . -inum 1211764 -exec rm {} \;
————————————————————————————————————————————
linux下怎样删除以横线开关的文件:
一些客户用FTP上传了一些以横线开关的文件,然后需要删除或改名时都不能操作.所以很苦恼.
在删除时报以下错误:
以下是解决方法:
1.首先以ll -i 查看下文件的inode值.
2.有以下命令删除或改名此类文件:
find 命令
使用 UNIX find 命令,您可以完成使用 ls 命令所开始的工作。对于要进行操作的文件,您已经知道了它们的索引编号,那么就可以开始进行相应的操作了!
要删除看似无名的文件,您只需要使用 find 和 -inum 开关对索引编号和文件进行定位。然后,在找到该文件之后,使用 find 和 -exec 开关删除该文件:
# find . -inum 393228 -exec rm {} \;
要对该文件进行重命名或删除,可以使用 mv 或 rm:
删除文件:
# find . -inum 393228 -exec mv {} passwd.txt \;
重命名文件:
问题解决.
来自:http://blog.chinaunix.net/uid-23683795-id-2391090.html
[最好语言]PHP下的fastcgi使用fastcgi_finish_request真的提高页面响应速度无副作用?与session锁的一个相关性问题的探讨性性业余非正式研究。
Php/Js/Shell/Go jackx 2015-10-23 16:38
背景:提高了性能,任何事情都可以辩证的看,稳定性于鲁棒性,光的波粒二象性,凡事都有两面性,如戴眼镜虽然可以装丝文,但是雨中漫步的时候容易撞电线杆;抽烟可以让身上有女生喜欢的淡淡烟草味,但是会危害周围人的健康;醉酒虽然可以让人精神愉悦,但是会说出真话,这些都是我的亲身体验.......写不下去了。
wintiongXX - sng<wintiXX@gmail.com> 14:39:09
php里哪个函数,是可以在php执行过程中直接响应nginx,但是让php继续执行?
cody(2501385XX) 14:40:44
fastcgi_finish_request();
wintiongXX - sng<wintiXX@gmail.com> 14:41:22
我就记得有这个函数,一时想不起来了
@cody
X哥chen(X哥)<blXXX.c@163.com> 14:45:09
用fastcgi_finish_request要注意一下,
如果fastcgi_finish_request"之后", 到整个程序完成的时间还很久或有其他的阻塞调用,
当前进程是无法处理请求的, 可能导致各种问题
wintiongXX - sng<wintiXX@gmail.com> 14:46:23
这个知道的,其实总体而言进程耗时没变化,只是有些东西没必要让用户等你
erikYXXX-TEG(744366XXX) 14:48:32
使用这个函数不能使用file存储session(使用其他存储也需要关掉session 锁)。不然用户A第一次持有session访问,如果后续操作有耗时操作,用户的session会被锁住,导致后续访问卡住。
问苍天个猫(13427XXX) 15:01:35
可以提前session_write_close啊
erikYXXX-TEG(744366XXX) 15:01:59
也是可以的。
——————扯淡开始———————
JackX-回忆未来有甚用(372647XXX) 16:19:27
请问各位弟兄们,这两个函数放在一块有啥区别:
1.PHP ignore_user_abort() 函数, ignore_user_abort(true); php关闭浏览器还能运行函数。
2. fastcgi_finish_request();
都解决了啥么子问题???
JackX-回忆未来有甚用(372647XXX) 16:24:06
我问的问题就没一个人接一个?还是认为我不是搞PHPer的啊
问题太肤浅?
allendai<snowheart.dai@gmail.com> 16:24:56
没用过。。
JackX-回忆未来有甚用(372647XXX) 16:27:31
我只是好奇,哈哈~
你说这些鸡肋功能开发出来有毛用啊,还好天峰说没有之一,哈哈。
Ran-韩最好语言(128112XX) 16:29:13
因为PHP设计之初只有 请求开始到请求结束 这段生命周期,后面的它控制不了。各种函数的出现就是为了弥补这个缺陷。
JackX-回忆未来有甚用(372647XXX) 16:29:16
PHP ignore_user_abort() 函数,我用来做一些导表由PHP从A到B做下逻辑导入数据库,浏览器上访问下容易超时,于是用到。
至于这个: fastcgi_finish_request(); 我也是听x哥在说,于是问下,都用来干嘛子?上传视频后-》转码->入库->推前台,第二三四都可以连接起来???
Ran-韩最好语言(128112XX) 16:29:28
使用消息队列异步处理才是正途。
erikYXXX-TEG(744366XXX) 16:29:54
php session lock主要是各个session促出模块实现自己实现的锁。默认的session 存储是文件,实现是在打开之前flock session文件。如果选择memcached存储session,锁是在memcache扩展里面实现的。
如果自己实现SessionHandler接口存储,可以选择不实现锁。
fastcgi_finish_request 可以提前把结果返回给nginx,之后脚本还可以保留上下文执行一些任务,可以算是伪异步。最好还是使用MQ来异步处理任务。
allendai<snowheart.dai@gmail.com> 16:30:06
……用浏览器调用导入程序
这就是你的不专业了
JackX-回忆未来有甚用(372647XXX) 16:31:05
我觉得也是,所以我觉得兄弟们都是专业的,
可为何发明这个鸡肋功能,有点玩的感觉哟。
结论:
X哥chen(X哥)<blXXX.c@163.com> 16:38:59
+1
异步化才是正途
wintiongXX - sng<wintiXX@gmail.com> 14:39:09
php里哪个函数,是可以在php执行过程中直接响应nginx,但是让php继续执行?
cody(2501385XX) 14:40:44
fastcgi_finish_request();
wintiongXX - sng<wintiXX@gmail.com> 14:41:22
我就记得有这个函数,一时想不起来了
@cody
X哥chen(X哥)<blXXX.c@163.com> 14:45:09
用fastcgi_finish_request要注意一下,
如果fastcgi_finish_request"之后", 到整个程序完成的时间还很久或有其他的阻塞调用,
当前进程是无法处理请求的, 可能导致各种问题
wintiongXX - sng<wintiXX@gmail.com> 14:46:23
这个知道的,其实总体而言进程耗时没变化,只是有些东西没必要让用户等你
erikYXXX-TEG(744366XXX) 14:48:32
使用这个函数不能使用file存储session(使用其他存储也需要关掉session 锁)。不然用户A第一次持有session访问,如果后续操作有耗时操作,用户的session会被锁住,导致后续访问卡住。
问苍天个猫(13427XXX) 15:01:35
可以提前session_write_close啊
erikYXXX-TEG(744366XXX) 15:01:59
也是可以的。
——————扯淡开始———————
JackX-回忆未来有甚用(372647XXX) 16:19:27
请问各位弟兄们,这两个函数放在一块有啥区别:
1.PHP ignore_user_abort() 函数, ignore_user_abort(true); php关闭浏览器还能运行函数。
2. fastcgi_finish_request();
都解决了啥么子问题???
JackX-回忆未来有甚用(372647XXX) 16:24:06
我问的问题就没一个人接一个?还是认为我不是搞PHPer的啊
问题太肤浅?
allendai<snowheart.dai@gmail.com> 16:24:56
没用过。。
JackX-回忆未来有甚用(372647XXX) 16:27:31
我只是好奇,哈哈~
你说这些鸡肋功能开发出来有毛用啊,还好天峰说没有之一,哈哈。
Ran-韩最好语言(128112XX) 16:29:13
因为PHP设计之初只有 请求开始到请求结束 这段生命周期,后面的它控制不了。各种函数的出现就是为了弥补这个缺陷。
JackX-回忆未来有甚用(372647XXX) 16:29:16
PHP ignore_user_abort() 函数,我用来做一些导表由PHP从A到B做下逻辑导入数据库,浏览器上访问下容易超时,于是用到。
至于这个: fastcgi_finish_request(); 我也是听x哥在说,于是问下,都用来干嘛子?上传视频后-》转码->入库->推前台,第二三四都可以连接起来???
Ran-韩最好语言(128112XX) 16:29:28
使用消息队列异步处理才是正途。
erikYXXX-TEG(744366XXX) 16:29:54
php session lock主要是各个session促出模块实现自己实现的锁。默认的session 存储是文件,实现是在打开之前flock session文件。如果选择memcached存储session,锁是在memcache扩展里面实现的。
如果自己实现SessionHandler接口存储,可以选择不实现锁。
fastcgi_finish_request 可以提前把结果返回给nginx,之后脚本还可以保留上下文执行一些任务,可以算是伪异步。最好还是使用MQ来异步处理任务。
allendai<snowheart.dai@gmail.com> 16:30:06
……用浏览器调用导入程序
这就是你的不专业了
JackX-回忆未来有甚用(372647XXX) 16:31:05
我觉得也是,所以我觉得兄弟们都是专业的,
可为何发明这个鸡肋功能,有点玩的感觉哟。
结论:
X哥chen(X哥)<blXXX.c@163.com> 16:38:59
+1
异步化才是正途
背景:有时在做一些Nginx的Proxy时,如从80端口请求后代码到其它web服务器如tomcat的8080端口,需要一些主备的思想,也就是万一主服务器挂了怎么办?用备机了,这块Nginx支持这样一个功能的。
一)nginx从前端域名支向代理并负载均衡代理到其他ip并配置了域名的机器,这儿得有proxy_set_header Host $host;相当于以域名访问IP:
经测试,这个Nginx的七层代理感觉还是比Lvs差一点,压力测试时这块儿还是有点卡:
二)如nginx暴露出域名反向代理到一台tomcat的以IP指向的8080端口:
——————————————————————————————————————————
只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。
可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性。
关于这个参数的官档说明:
http://wiki.nginx.org/NginxHttpUpstreamModule
backup - (0.6.7 or later) only uses this server if the non-backup servers are all down or busy (cannot be used with the directive ip_hash)
摘自:http://hillside.iteye.com/blog/703281
http://chattool.sinaapp.com/?p=1063
一)nginx从前端域名支向代理并负载均衡代理到其他ip并配置了域名的机器,这儿得有proxy_set_header Host $host;相当于以域名访问IP:
经测试,这个Nginx的七层代理感觉还是比Lvs差一点,压力测试时这块儿还是有点卡:
二)如nginx暴露出域名反向代理到一台tomcat的以IP指向的8080端口:
——————————————————————————————————————————
只要在希望成为后备的服务器ip后面多添加一个backup参数,这台服务器就会成为备份服务器。
在平时不使用,nginx不会给它转发任何请求。只有当其他节点全部无法连接的时候,nginx才会启用这个节点。
一旦有可用的节点恢复服务,该节点则不再使用,又进入后备状态。
可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性。
关于这个参数的官档说明:
http://wiki.nginx.org/NginxHttpUpstreamModule
backup - (0.6.7 or later) only uses this server if the non-backup servers are all down or busy (cannot be used with the directive ip_hash)
摘自:http://hillside.iteye.com/blog/703281
http://chattool.sinaapp.com/?p=1063
linux 多线程函数 pthread_cond_wait 及pthread_cond_wait()用法分析。
Unix/LinuxC技术 jackx 2015-10-20 11:28
最近找到一篇很好的文章将linux多线程函数pthread_cond_wait,是我茅塞顿开,豁然开朗,决定转载过来,以便经常复习记忆。
条件变量的结构为pthread_cond_t,函数pthread_cond_init()被用来初始化一个条件变量。它的原型为:
extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr));
其中cond是一个指向结构pthread_cond_t的指针,cond_attr是一个指向结构pthread_condattr_t的指针。结构 pthread_condattr_t是条件变量的属性结构,和互斥锁一样我们可以用它来设置条件变量是进程内可用还是进程间可用,默认值是 PTHREAD_ PROCESS_PRIVATE,即此条件变量被同一进程内的各个线程使用。注意初始化条件变量只有未被使用时才能重新初始化或被释放。释放一个条件变量的函数为pthread_cond_destroy(pthread_cond_t cond)。
也可以静态的初始化条件变量
pthread_cond_t my_condition = PTHREAD_COND_INITIALIZER;
函数pthread_cond_wait()使线程阻塞在一个条件变量上。它的函数原型为:
extern int pthread_cond_wait __P ((pthread_cond_t *__cond,pthread_mutex_t *__mutex));
调用这个函数时,线程解开mutex指向的锁并被条件变量cond阻塞。线程可以被函数pthread_cond_signal和函数 pthread_cond_broadcast唤醒线程被唤醒后,它将重新检查判断条件是否满足,如果还不满足,一般说来线程应该仍阻塞在这里,被等待被下一次唤醒。这个过程一般用while语句实现。
通过下面的程序来理解:
__________________华丽的CODE分割线_________________________
pthreadCondWait.c
___________________至关重要的绚烂的结果分割线_________________
[root@iZ25dcp92ckZ testdemo]# vi pthreadCondWait.c
[root@iZ25dcp92ckZ testdemo]# gcc pthreadCondWait.c -lpthread -o pthreadCondWaitStudy
[root@iZ25dcp92ckZ testdemo]# ./pthreadCondWaitStudy
thead1:1
Up Unlock Mutex
thead1:2
Up Unlock Mutex
Up Unlock Mutex
thread2:3
Down Ulock Mutex
thread2:3
Down Ulock Mutex
thead1:4
Up Unlock Mutex
thead1:5
Up Unlock Mutex
Up Unlock Mutex
thread2:6
Down Ulock Mutex
thread2:6
Down Ulock Mutex
thead1:7
Up Unlock Mutex
thead1:8
Up Unlock Mutex
Up Unlock Mutex
thread2:9
Down Ulock Mutex
_________________HOW IT WORKS________
i不是三的倍数的时候.
thread2条件变量阻塞,释放Mutex
thread1加锁,打印thread1:i,释放锁,打印"Up Unlock Mutex"
i为3的倍数的时候,
thread1,加锁,条件变量通知,唤醒条件变量阻塞线程,打印"Up Unlock Mutex"
thread2,被唤醒,加锁,打印"thread2:i",释放锁,打印"Down Ulock Mutex"
所以说函数pthread_cond_wait()调用时,不仅对条件变量起作用,还对互斥锁有作用!
++++++++++++++++唯美的好书推荐线++++++++++++
"Beiginning Linux Programming" by Neil Matthrew & Richard Stones
You can choose the English version or Chinese version, but I recommend the English one. Maybe it' easier to understand what the authers say than the Chinese one , even if you're Chinese.
原文地址:http://blogold.chinaunix.net/u1/53448/showart_431857.html
条件变量的结构为pthread_cond_t,函数pthread_cond_init()被用来初始化一个条件变量。它的原型为:
extern int pthread_cond_init __P ((pthread_cond_t *__cond,__const pthread_condattr_t *__cond_attr));
其中cond是一个指向结构pthread_cond_t的指针,cond_attr是一个指向结构pthread_condattr_t的指针。结构 pthread_condattr_t是条件变量的属性结构,和互斥锁一样我们可以用它来设置条件变量是进程内可用还是进程间可用,默认值是 PTHREAD_ PROCESS_PRIVATE,即此条件变量被同一进程内的各个线程使用。注意初始化条件变量只有未被使用时才能重新初始化或被释放。释放一个条件变量的函数为pthread_cond_destroy(pthread_cond_t cond)。
也可以静态的初始化条件变量
pthread_cond_t my_condition = PTHREAD_COND_INITIALIZER;
函数pthread_cond_wait()使线程阻塞在一个条件变量上。它的函数原型为:
extern int pthread_cond_wait __P ((pthread_cond_t *__cond,pthread_mutex_t *__mutex));
调用这个函数时,线程解开mutex指向的锁并被条件变量cond阻塞。线程可以被函数pthread_cond_signal和函数 pthread_cond_broadcast唤醒线程被唤醒后,它将重新检查判断条件是否满足,如果还不满足,一般说来线程应该仍阻塞在这里,被等待被下一次唤醒。这个过程一般用while语句实现。
通过下面的程序来理解:
__________________华丽的CODE分割线_________________________
pthreadCondWait.c
___________________至关重要的绚烂的结果分割线_________________
[root@iZ25dcp92ckZ testdemo]# vi pthreadCondWait.c
[root@iZ25dcp92ckZ testdemo]# gcc pthreadCondWait.c -lpthread -o pthreadCondWaitStudy
[root@iZ25dcp92ckZ testdemo]# ./pthreadCondWaitStudy
thead1:1
Up Unlock Mutex
thead1:2
Up Unlock Mutex
Up Unlock Mutex
thread2:3
Down Ulock Mutex
thread2:3
Down Ulock Mutex
thead1:4
Up Unlock Mutex
thead1:5
Up Unlock Mutex
Up Unlock Mutex
thread2:6
Down Ulock Mutex
thread2:6
Down Ulock Mutex
thead1:7
Up Unlock Mutex
thead1:8
Up Unlock Mutex
Up Unlock Mutex
thread2:9
Down Ulock Mutex
_________________HOW IT WORKS________
i不是三的倍数的时候.
thread2条件变量阻塞,释放Mutex
thread1加锁,打印thread1:i,释放锁,打印"Up Unlock Mutex"
i为3的倍数的时候,
thread1,加锁,条件变量通知,唤醒条件变量阻塞线程,打印"Up Unlock Mutex"
thread2,被唤醒,加锁,打印"thread2:i",释放锁,打印"Down Ulock Mutex"
所以说函数pthread_cond_wait()调用时,不仅对条件变量起作用,还对互斥锁有作用!
++++++++++++++++唯美的好书推荐线++++++++++++
"Beiginning Linux Programming" by Neil Matthrew & Richard Stones
You can choose the English version or Chinese version, but I recommend the English one. Maybe it' easier to understand what the authers say than the Chinese one , even if you're Chinese.
原文地址:http://blogold.chinaunix.net/u1/53448/showart_431857.html
背景:Raspberry Pi下的mysql启动出现如下:
151017 8:33:10 [Note] Server socket created on IP: '127.0.0.1'.
151017 8:33:10 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
151017 8:33:10 [ERROR] Do you already have another mysqld server running on port: 3306 ?
注意关键词 Bind
这时,可以打开/etc/mysql/my.cnf
...
bind-address = 192.168.141.25
...
如果你也是这么写的,那么把它改成
bind-address = 0.0.0.0
然后重启即可
另外,mysql在启动时进行了端口的bind,那么当ip更换时,请注意这些细节
vi /etc/mysql/my.cnf
#bind-address = 127.0.0.1
bind-address = 0.0.0.0
来自:http://www.educity.cn/wenda/403390.html
实际情况是因为自己把lo给干掉了,没有127.0.0.1这个端口:
vi /etc/network/interfaces
auto lo
iface lo inet loopback
....
同理,apache2也是一样的道理,因为这个软的IP,没有了,于是也没法访问,得特别注意:
vi /etc/network/interfaces
151017 8:33:10 [Note] Server socket created on IP: '127.0.0.1'.
151017 8:33:10 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
151017 8:33:10 [ERROR] Do you already have another mysqld server running on port: 3306 ?
注意关键词 Bind
这时,可以打开/etc/mysql/my.cnf
...
bind-address = 192.168.141.25
...
如果你也是这么写的,那么把它改成
bind-address = 0.0.0.0
然后重启即可
另外,mysql在启动时进行了端口的bind,那么当ip更换时,请注意这些细节
vi /etc/mysql/my.cnf
#bind-address = 127.0.0.1
bind-address = 0.0.0.0
来自:http://www.educity.cn/wenda/403390.html
实际情况是因为自己把lo给干掉了,没有127.0.0.1这个端口:
vi /etc/network/interfaces
auto lo
iface lo inet loopback
....
同理,apache2也是一样的道理,因为这个软的IP,没有了,于是也没法访问,得特别注意:
vi /etc/network/interfaces
背景:有时一些小的网站,比如个人博客需要每天备份数据,鉴于此,得自动化不是,这儿就是一个简单可行的好方法,配置上后就不用管了。更牛B点就是主辅助同步,在辅库上运行下面的脚本更发妥当。
1)备份权限列表需要哪些?
1.Select 读取
2.SHOW DATABASES 允许访问完整的数据库列表
4. LOCK TABLES 允许锁定表
5.RELOAD 允许载入和刷新服务器缓存
以上几点是必须的.请注意
主辅助是不复制角色表的。
2)实践添加备份用户如下:
grant SELECT, RELOAD, SHOW DATABASES, LOCK TABLES on *.* to 'back'@'localhost' identified by "************"
3)实现下面自动备份脚本:
cat backUpJustWinDatas.sh
4) 定时生成定时删除命令:
1)定时生成:
0 0 * * * /bin/bash /usr/local/scripts/backUpJustWinDatas.sh
2)删除旧的:
0 1 * * * find /data/backup/db.JustWin.com -mtime +7 -exec rm -R {} \;
最后,参考实践来源自:http://www.jb51.net/article/49099.htm
http://blog.163.com/o5655@126/blog/static/166742834201181393837133/
1)备份权限列表需要哪些?
1.Select 读取
2.SHOW DATABASES 允许访问完整的数据库列表
4. LOCK TABLES 允许锁定表
5.RELOAD 允许载入和刷新服务器缓存
以上几点是必须的.请注意
主辅助是不复制角色表的。
2)实践添加备份用户如下:
grant SELECT, RELOAD, SHOW DATABASES, LOCK TABLES on *.* to 'back'@'localhost' identified by "************"
3)实现下面自动备份脚本:
cat backUpJustWinDatas.sh
4) 定时生成定时删除命令:
1)定时生成:
0 0 * * * /bin/bash /usr/local/scripts/backUpJustWinDatas.sh
2)删除旧的:
0 1 * * * find /data/backup/db.JustWin.com -mtime +7 -exec rm -R {} \;
最后,参考实践来源自:http://www.jb51.net/article/49099.htm
http://blog.163.com/o5655@126/blog/static/166742834201181393837133/
[实践OK]简单实现限定phpmyadmin访问ip的方法,phpadmin因PHP的session目录及自身目录权限引发错误解决。
Php/Js/Shell/Go jackx 2015-10-16 14:27
背景:在外面上面放一个phpmyadmin的发现阿里的云盾发现有人居然来试着访问,网上不安全。
攻击IP 攻击时间 攻击URL 攻击类型 处理结果
199.191.57.182 2015-10-16 05:29:33 101.20*.1*.**/phpmyadmin/scripts/setup.php Match1:/phpmyadmin/scripts/setup.php 其他 已拦截
——————————————————————————————————————————————————————————————————————
修改:config.inc.php
在第一行加入
$ip_prefix = '192.168.121.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip_prefix)) != $ip_prefix ) die('illegal access error');
ip可以设置成你自己电脑的ip。如果是内网建议直接设置成自己的ip地址取代ip地址段。这样的话可以防止其它用户在内网中访问。如果是公网ip限制,直接使用即可。
只是简单的限定,没有太大要求只是暂时限定,可以使用这种方式。临时性的限制用户去访问。
当然,也可以用foreach写成一个数组来处理..........
摘自:http://www.jb51.net/article/34509.htm
phpMyAdmin 因PHP的session目录及自身目录权限引发错误解决:
问题一:phpMyAdmin -Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
问题:打开phpmyadmin出现如下错误:Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
解决办法如下:
vim /etc/php5/apache2/php.ini
查找session.save_path ,将session.save_path=/var/lib/php5这一句的注释符号去掉。
如还不能正常工作,将session.auto_start的值改为1(启动),默认是0(禁用)
这个错误一般是由于session文件的存储路径不可写造成的,在linux下一般是路径的权限问题。在windows下面session.save_path一定要设置到一个可以读写的路径,如 D:/tmp 等。
摘自:http://blog.sina.com.cn/s/blog_62cd41130100uhpv.html
=====================================================================================
问题二:phpmyadmin错误Wrong permissions on configuration file, should not be world writable!
登录phpmyadmin,发现提示Wrong permissions on configuration file, should not be world writable!,提示配置文件必须不可写,这里改成755就OK了.
用以下命令 chmod -R 755 /home/wwwroot/phpmyadmin
摘自:http://www.111cn.net/phper/31/59722.htm
攻击IP 攻击时间 攻击URL 攻击类型 处理结果
199.191.57.182 2015-10-16 05:29:33 101.20*.1*.**/phpmyadmin/scripts/setup.php Match1:/phpmyadmin/scripts/setup.php 其他 已拦截
——————————————————————————————————————————————————————————————————————
修改:config.inc.php
在第一行加入
$ip_prefix = '192.168.121.';
if (substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip_prefix)) != $ip_prefix ) die('illegal access error');
ip可以设置成你自己电脑的ip。如果是内网建议直接设置成自己的ip地址取代ip地址段。这样的话可以防止其它用户在内网中访问。如果是公网ip限制,直接使用即可。
只是简单的限定,没有太大要求只是暂时限定,可以使用这种方式。临时性的限制用户去访问。
当然,也可以用foreach写成一个数组来处理..........
摘自:http://www.jb51.net/article/34509.htm
phpMyAdmin 因PHP的session目录及自身目录权限引发错误解决:
问题一:phpMyAdmin -Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
问题:打开phpmyadmin出现如下错误:Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
解决办法如下:
vim /etc/php5/apache2/php.ini
查找session.save_path ,将session.save_path=/var/lib/php5这一句的注释符号去掉。
如还不能正常工作,将session.auto_start的值改为1(启动),默认是0(禁用)
这个错误一般是由于session文件的存储路径不可写造成的,在linux下一般是路径的权限问题。在windows下面session.save_path一定要设置到一个可以读写的路径,如 D:/tmp 等。
摘自:http://blog.sina.com.cn/s/blog_62cd41130100uhpv.html
=====================================================================================
问题二:phpmyadmin错误Wrong permissions on configuration file, should not be world writable!
登录phpmyadmin,发现提示Wrong permissions on configuration file, should not be world writable!,提示配置文件必须不可写,这里改成755就OK了.
用以下命令 chmod -R 755 /home/wwwroot/phpmyadmin
摘自:http://www.111cn.net/phper/31/59722.htm