近日,互联网有消息透露称微软Skype宣布正在测试一个基于Web端的即时通讯平台,也就是说Web版的Skype很可能将很快和大家见面。
按照Skype的说法,有了这个基于Web端的Skype即时通讯平台,接下来用户们将可以直接在浏览器中使用Skype的音视频服务,将会支持IE、Chrome、Firefox、Safari等浏览器。
Skype宣布正测试基于Web端的即时通讯平台_天极yesky软件频道
据悉,Skype for Web采用WebRTC技术,是一套基于浏览器的音频和视频标准,该标准将不需要用户安装本地软件。
因为目前处于Beta阶段,故仅有小部分用户可以体验到,并且还存在许多Bug,正式版将会在接下来几个月发布。
按照Skype的说法,有了这个基于Web端的Skype即时通讯平台,接下来用户们将可以直接在浏览器中使用Skype的音视频服务,将会支持IE、Chrome、Firefox、Safari等浏览器。
Skype宣布正测试基于Web端的即时通讯平台_天极yesky软件频道
据悉,Skype for Web采用WebRTC技术,是一套基于浏览器的音频和视频标准,该标准将不需要用户安装本地软件。
因为目前处于Beta阶段,故仅有小部分用户可以体验到,并且还存在许多Bug,正式版将会在接下来几个月发布。
背景:chrome速度快,版本更新后,我们认为速度更快,现在都到44.0.2369.0了,链接在,http://down.tech.sina.com.cn/page/40975.html
Google浏览器Chrome稳定版近日发布例行小幅更新,新版本号为v40.0.2214.94,本次更新为V40的第三次维护,修补安全漏洞并消除bug,改进了更新消息提示窗,在提示出错信息后给予全新计时机制。
Chrome v40.0.2214.94浏览器稳定版更新_天极yesky软件频道
Chrome v40.0.2214.94浏览器稳定版更新
Google Chrome 40.0 更新内容如下:
在Windows和Linux平台上新的Chrome应用更新对话框。
此更新包括62个安全修补程序。包括:ICU、V8引擎、字体中的内存损坏问题,Use-after-free在IndexedDB、WebAudio、DOM、FFmpeg、Speech、Views中的问题,Same-origin-bypass在V8引擎中的问题,ICU、字体未初始化值的问题,UI、Skia、PDFium、字体越界读取问题,AppCache的缓存错误问题等。
64位Chrome能更好地利用当今的硬件,并且对速度、安全性、稳定性进行了改善,主要特性如下:
速度:64位Chrome能利用最新的处理器和编译器优化、更现代的指令集、更快的调用协议,从而实现了速度大提升,尤其是在图形和多媒体内容方面,性能提升25%。
安全性:Chrome能够利用最新的OS功能,例如Windows 8的High Entropy ASLR,64位Chrome在安全性上也实现了大幅提升。
稳定性:Google还在32位Chrome的基础上增强了64位Chrome的稳定性,尤其是,渲染器处理中的崩溃率大大降低,是32位Chrome的一半。
官方下载:
34位版本 Chrome v40.0.2214.94
如果出现升级失败,看下Google Chrome浏览器提示管理员已停用更新的解决方法:
Google Chrome浏览器提示管理员已停用更新的解决方法
最近发现Google Chrome不能自动更新,打开设置的关于Google Chrome看到如下图的提示,
要解决该问题,需要修改注册表的值,打开运行窗口(快捷键Win+R)输入regedit并回车,
在注册表窗口中依次导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update
找到该项下面的UpdateDefault,将其值修改为1。
Google浏览器Chrome稳定版近日发布例行小幅更新,新版本号为v40.0.2214.94,本次更新为V40的第三次维护,修补安全漏洞并消除bug,改进了更新消息提示窗,在提示出错信息后给予全新计时机制。
Chrome v40.0.2214.94浏览器稳定版更新_天极yesky软件频道
Chrome v40.0.2214.94浏览器稳定版更新
Google Chrome 40.0 更新内容如下:
在Windows和Linux平台上新的Chrome应用更新对话框。
此更新包括62个安全修补程序。包括:ICU、V8引擎、字体中的内存损坏问题,Use-after-free在IndexedDB、WebAudio、DOM、FFmpeg、Speech、Views中的问题,Same-origin-bypass在V8引擎中的问题,ICU、字体未初始化值的问题,UI、Skia、PDFium、字体越界读取问题,AppCache的缓存错误问题等。
64位Chrome能更好地利用当今的硬件,并且对速度、安全性、稳定性进行了改善,主要特性如下:
速度:64位Chrome能利用最新的处理器和编译器优化、更现代的指令集、更快的调用协议,从而实现了速度大提升,尤其是在图形和多媒体内容方面,性能提升25%。
安全性:Chrome能够利用最新的OS功能,例如Windows 8的High Entropy ASLR,64位Chrome在安全性上也实现了大幅提升。
稳定性:Google还在32位Chrome的基础上增强了64位Chrome的稳定性,尤其是,渲染器处理中的崩溃率大大降低,是32位Chrome的一半。
官方下载:
34位版本 Chrome v40.0.2214.94
如果出现升级失败,看下Google Chrome浏览器提示管理员已停用更新的解决方法:
Google Chrome浏览器提示管理员已停用更新的解决方法
最近发现Google Chrome不能自动更新,打开设置的关于Google Chrome看到如下图的提示,
要解决该问题,需要修改注册表的值,打开运行窗口(快捷键Win+R)输入regedit并回车,
在注册表窗口中依次导航到
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Update
找到该项下面的UpdateDefault,将其值修改为1。
背景:能用web引擎支持不用web浏览器,更精减,能用开源不用闭源,这儿就有一个开源的web 引擎,并支持WEBRtc ,链接:https://crosswalk-project.org/documentation/webrtc.html ,第二:微软从IE转向Spartan浏览器开发 http://tools.yesky.com/331/50546831.shtml ,微软新浏览器“Spartan”界面截图再曝光,解决兼容性问题:http://soft.yesky.com/52/50685552.shtml ,表明微软正在发力网络用户及界面展现端。
阅读全文

背景:天气变化太快,感冒了要是流鼻涕,那真是最痛苦的事了,不管大人孩子,鼻子都被擦的红红的,整天吸溜鼻子。在这里教大家几个方法,可以快速止鼻涕的。
一)如果你自己没法判断是风热还是风寒感冒,那就买一盒西药的感冒药吃了吧,可以止鼻涕,治鼻塞的。
二)或者拿热气熏鼻子,让鼻涕液化大量快速的流出,这样做过之后鼻涕就少了。
三)可以拿电吹风吹背部大椎穴和肺俞穴吹10分钟,这样鼻涕也可以很快止住,对于治疗初期感冒也是立竿见影。
阅读全文
一)如果你自己没法判断是风热还是风寒感冒,那就买一盒西药的感冒药吃了吧,可以止鼻涕,治鼻塞的。
二)或者拿热气熏鼻子,让鼻涕液化大量快速的流出,这样做过之后鼻涕就少了。
三)可以拿电吹风吹背部大椎穴和肺俞穴吹10分钟,这样鼻涕也可以很快止住,对于治疗初期感冒也是立竿见影。

warning:deprecated conversion from string constant to 'char *' 解决方案
Unix/LinuxC技术 jackxiang 2015-2-16 17:00
背景:用新版本的编译器编译时,原来没有报任何错和警告的代码,现在居然报出警告了,
之前是:
无错误,现在是新的gcc v4.4的编译器编译时候出现警告了,如下:
警告如下:
multipepollserver.cpp:530: warning: deprecated conversion from string constant to ‘char*’
multipepollserver.cpp:536: warning: deprecated conversion from string constant to ‘char*’
multipepollserver.cpp:537: warning: deprecated conversion from string constant to ‘char*’
原来是定义pid变量时,新的gcc版本需要加上const,也就是:
为何要加,下面文章有描写道:
阅读全文
之前是:
无错误,现在是新的gcc v4.4的编译器编译时候出现警告了,如下:
警告如下:
multipepollserver.cpp:530: warning: deprecated conversion from string constant to ‘char*’
multipepollserver.cpp:536: warning: deprecated conversion from string constant to ‘char*’
multipepollserver.cpp:537: warning: deprecated conversion from string constant to ‘char*’
原来是定义pid变量时,新的gcc版本需要加上const,也就是:
为何要加,下面文章有描写道:

[实践OK]libmemcached使用(c 客户端连接 memcached),封装 libmemcached 构建 memcached 客户端。
Cache与Store jackxiang 2015-2-15 17:05
背景:如果要用c写成一个服务部署4台机器,均得和memcached交互,还得用这个库,如PHP的扩展啥的没怎么和c的lib打交到,这下实践一下挺好的,过程比较曲折但是也发现了这memcached用新的gcc还是对配置上有一些影响的,就单说配置这块的门槛就变高了,更别说c下的调试啥的,实践起来仅仅通过网上的一篇文章未必能搞定。
libmemcached是C客户端到memcached服 务器的接口库。具有低内存占用率、线程安全、并提供对memcached功能的全面支持。它还采用多种命令行工具,包括: memcat、memflush、memrm、memstat、memslap。
在Ubuntu上安装memcached和libmemcached http://www.linuxidc.com/Linux/2010-04/25543.htm
libmemcached C/C++ API使用实例 http://www.linuxidc.com/Linux/2012-01/52516.htm
memcached简单的使用教程(转载): http://blog.csdn.net/huangqiwa/article/details/21174425
使用连接池访问memcached(libmemcached)的完整例子:http://blog.csdn.net/hzhxxx/article/details/41961355
(1)封装 libmemcached 构建 memcached 客户端:http://blog.csdn.net/yanghw0510/article/details/7292236
(2)libmemcached使用(c 客户端连接 memcached) :
(3)libmemcached 下载地址。https://launchpad.net/libmemcached/
1、下载安装libmemcached
$ wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz
$ tar xvzf libmemcached-0.44tar.gz
$ cd libmemcached-0.44
$ ./configure
$ make
$ sudo make install
libmemcached 默认安装在/usr/local/,头文件安装在/usr/local/include/libmemcachde/,动态库默认安装在/usr/local/lib/下。
我在这儿下的:https://launchpadlibrarian.net/165454254/libmemcached-1.0.18.tar.gz
注:
如果报”./libmemcached-1.0/memcached.h:46:27: error: tr1/cinttypes: No such file or directory”错误,则需要升级gcc版本.
处理如下:
yum install gcc44 gcc44-c++ libstdc++44-devel
export CC=/usr/bin/gcc44
export CXX=/usr/bin/g++44
重新编译安装libmemcached-1.0.9
关键信息:error: tr1/cinttypes: No such file or directory
报错原因:libmemcached需要 gcc 4.2 以上版本才可编译,而centos 5.4 的gcc版本只有4.1 ,详见:https://bugs.launchpad.net/libmemcached/+bug/1076181
解决方法:安装gcc44的扩展包,详见:http://gearman.info/build/centos5-8.html
export就是在于此,把这个gcc和g++的版本号给提上去,以方便这个memcached的编译:
/usr/bin/gcc44 -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-1) (GCC)
gcc -v
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
/usr/bin/g++44 -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-1) (GCC)
g++ -v
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
——————————————————————————————————————————————————————————
这个问题在安gearman时也遇到过,升级gcc,参考连接: http://jackxiang.com/post/7693/ ,软链接如下所示:
export CC=/usr/bin/gcc44 or export CC=/usr/bin/gcc
export CXX=/usr/bin/g++44
./configure && make && make install
./configure && make && make install
/usr/bin/install -c -m 644 support/libmemcached.pc '/usr/local/lib/pkgconfig'
make[2]: Leaving directory `/tmp/testmemcachedcpp/libmemcached-1.0.18'
make[1]: Leaving directory `/tmp/testmemcachedcpp/libmemcached-1.0.18'
g++ -o testmemcached testmemcached.cpp -lmemcached
In file included from /usr/local/include/libmemcached/memcached.h:39,
from testmemcached.cpp:6:
/usr/local/include/libmemcached-1.0/memcached.h:46:23: error: cinttypes: No such file or directory
明天再整下,估计是so没有给ldd进来...
2、libmemcached简单测试使用
编译:g++ -o testmemcached testmemcached.cpp -lmemcached
运行:./testmemcached
结果:Save data:value sucessful!
Get value:value sucessful!
Delete key:key sucessful!
实践编译一下:
g++ -o testmemcached testmemcached.cpp -lmemcached
In file included from /usr/local/include/libmemcached/memcached.h:39,
from testmemcached.cpp:6:
/usr/local/include/libmemcached-1.0/memcached.h:46:23: error: cinttypes: No such file or directory
看来还得重新export一次新的编译器,因为昨天的关了终端,今天的又没了:
export CC=/usr/bin/gcc44 or export CC=/usr/bin/gcc //这行有问题~
export CXX=/usr/bin/g++44
g++ -o testmemcached testmemcached.cpp -lmemcached
为何还是不行?
echo $CC
/usr/bin/gcc //没变,这儿有问题,再重新设置一次,查到上面这个or有问题:export CC=/usr/bin/gcc44。
# echo $CXX
/usr/bin/g++44 //变了
重新设置,好了:
export CC=/usr/bin/gcc44
/usr/bin/gcc44
继续折腾,/usr/bin/gcc44 -o testmemcached testmemcached.cpp -lmemcached
In file included from /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/cinttypes:35,
from /usr/local/include/libmemcached-1.0/memcached.h:46,
from /usr/local/include/libmemcached/memcached.h:39,
from testmemcached.cpp:6:
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
#error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x.
加上:-lpthread -std=c++0x ,解决如下:
g++ -o testmemcached testmemcached.cpp -lmemcached -lpthread -std=c++0x
/usr/bin/ld: cannot find -lmemcached
collect2: ld returned 1 exit status
也就是说编译器并不能从ldconfig 里得知,其lib在哪儿(及时把Lib路径加入到/etc/ld.so.conf.d/libmemcache.conf),得指定:
在网上找了一下,发现是这样的:http://blog.163.com/guixl_001/blog/static/4176410420121021111117987/ 里说得加一个新的参数,是和宏相关,那就加了,
指定一个新的参数:-std=c++0x :
/usr/bin/gcc44 -o testmemcached testmemcached.cpp -lmemcached -std=c++0x
/usr/local/lib/libmemcached.so: undefined reference to `pthread_once'
collect2: ld returned 1 exit status
/usr/bin/g++44 -o testmemcached testmemcached.cpp -lmemcached -std=c++0x
/usr/local/lib/libmemcached.so: undefined reference to `pthread_once'
怎样彻底解决"undefined reference to `pthread_create'"问题 ,说是加个: -lrt ,这一看就是那个memcached的库包含了这个文件:#include<pthread.h>
来源参考:
http://bbs.chinaunix.net/thread-1586752-1-1.html
于是Ok啦,最终O了,如下:
[root@test testmemcachedcpp]# /usr/bin/g++44 -o testmemcached testmemcached.cpp -lmemcached -lrt -std=c++0x
[root@test testmemcachedcpp]#
运行一下试试:
[root@test testmemcachedcpp]# ./testmemcached
./testmemcached: error while loading shared libraries: libmemcached.so.11: cannot open shared object file: No such file or directory
[root@test /]# find . -name "libmemcached.so.11"
./usr/local/lib/libmemcached.so.11
打开配置文件 vi /etc/ld.so.conf
加上一行:/usr/local/lib
执行/sbin/ldconfig /etc/ld.so.conf
[root@test testmemcachedcpp]# /sbin/ldconfig /etc/ld.so.conf
[root@test testmemcachedcpp]# ./testmemcached
[root@test testmemcachedcpp]#
没报错了~,用gdb看一下 加个-g参数:
/usr/bin/g++44 -g -o testmemcached testmemcached.cpp -lmemcached -lrt -std=c++0x
发现localhost没有开11211,于是找了一台机器把ip和端口写上,重新编译一次后运行Ok,如下:
[root@test testmemcachedcpp]# ./testmemcached
Save data:value sucessful!
Get value:value sucessful!
少了一个删除成功的,简单调试一下:
(gdb) n
Get value:value sucessful!
50 rc=memcached_delete(memc,key.c_str(),key_length,expiration);
(gdb) p key.c_str()
$5 = 0x184372e8 "key"
(gdb) p key_length
$6 = 3
(gdb) n
51 if(rc==MEMCACHED_SUCCESS)
(gdb) p rc
$3 = MEMCACHED_INVALID_ARGUMENTS
也就是调这个函数的参数不对,返回不是MEMCACHED_SUCCESS,所以没有打印出:cout<<"Delete key:"<<key<<" sucessful!"<<endl;
####################新的代码里grep了一下该方法###########################
./tests/mem_udp.cc: memcached_delete(memc, test_literal_param("foo"), 0));
./libmemcached-1.0/memcached.hpp: return memcached_success(memcached_delete(memc_, key.c_str(), key.length(), 0));
./libmemcached-1.0/memcached.hpp: return memcached_success(memcached_delete(memc_,
./tests/libmemcached-1.0/replication.cc: memcached_return_t del_rc= memcached_delete(memc_replicated,
./tests/libmemcached-1.0/mem_functions.cc: rc= memcached_delete(memc, "foo", 3, 1);
./tests/libmemcached-1.0/mem_functions.cc: test_compare(MEMCACHED_BUFFERED, (rc= memcached_delete(memc, "foo", 3, 0)));
./tests/libmemcached-1.0/mem_functions.cc: test_compare(MEMCACHED_SUCCESS, memcached_delete(memc, "foo", 3, 0));
./tests/libmemcached-1.0/mem_functions.cc: test_compare(MEMCACHED_NOTFOUND, memcached_delete(memc, "foo", 3, 0));
####################################################################
于是修改为下面这样:
//rc=memcached_delete(memc,key.c_str(),key_length,expiration);
rc=memcached_delete(memc,key.c_str(),key_length,0);
./testmemcached
Save data:value2 sucessful!
Get value:value2 sucessful!
Delete key:key sucessful!
刚才失败时有值,现在运行后没值了,给成功删除了:
[root@localhost ~]# telnet 192.168.108.7 11211
Escape character is '^]'.
get key
VALUE key 0 5
value
END
get key
END
后面怎么结合c的socket 及epoll进行进程/线程调试就不再细说了,我也在摸索中,应该也有相关的调试办法,但这儿说明这个memcached搞个新的gcc版本库才能编译确实带了相当多编译及配置上的的麻烦~
最后,用C函数里的add函数实现类php的memcache的扩展的原子操作函数,如下:
原子操作方法,假如有add后就不能再add,必须删除后才能add,这个可以用作锁:
./libmemcached-1.0.18/libmemcached-1.0/memcached.hpp:
和php的add函数一样第一次运行时没有问题此时值设置成功,再运行add时一次就add不进去,add设置进去后,用set是能重新设置进去的,只是用add原子操作是不行的,用它来做锁很好使:
1)代码片段:
2)运行情况:
[root@test testmemcachedcpp]# gdb testmemcached
b 41
r
Add data:value unsucessful,Perhaps add key before set !
(gdb) p rc
$2 = MEMCACHED_NOTSTORED
但是能够set进去:
42 rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
(gdb) n
43 if(rc==MEMCACHED_SUCCESS)
(gdb) p rc
$3 = MEMCACHED_SUCCESS
EOF
对add后的键对应的值,再用set方法是可以设置的,如下:
string key = "key2";
string value = "jackxiang";
rc=memcached_add(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
后再修改这个值:
value = "xiangdong";
rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
用gdb的断点跟踪一下并用telnet在设置后查看,如下:
[root@localhost ~]# telnet 192.168.108.7 11211
Escape character is '^]'.
get key2
END
get key2
VALUE key2 0 9
jackxiang
END
get key2
VALUE key2 0 9
xiangdong
END
听说,在下载客户端libmemcached-1.0.18/tests 下有测试列子,也可参考。比如cpp_example.cc
ls ~+/cpp_example.cc
/tmp/testmemcachedcpp/libmemcached-1.0.18/tests/cpp_example.cc
摘自:http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html
http://blog.chinaunix.net/uid-52437-id-2108905.html
后发现这个哥们写的文章很详细,http://blog.chinaunix.net/uid-20548989-id-1667248.html
加入add后,rc=MEMCACHED_NOTSTORED情况,代码贴下面:
libmemcached是C客户端到memcached服 务器的接口库。具有低内存占用率、线程安全、并提供对memcached功能的全面支持。它还采用多种命令行工具,包括: memcat、memflush、memrm、memstat、memslap。
在Ubuntu上安装memcached和libmemcached http://www.linuxidc.com/Linux/2010-04/25543.htm
libmemcached C/C++ API使用实例 http://www.linuxidc.com/Linux/2012-01/52516.htm
memcached简单的使用教程(转载): http://blog.csdn.net/huangqiwa/article/details/21174425
使用连接池访问memcached(libmemcached)的完整例子:http://blog.csdn.net/hzhxxx/article/details/41961355
(1)封装 libmemcached 构建 memcached 客户端:http://blog.csdn.net/yanghw0510/article/details/7292236
(2)libmemcached使用(c 客户端连接 memcached) :
(3)libmemcached 下载地址。https://launchpad.net/libmemcached/
1、下载安装libmemcached
$ wget http://launchpad.net/libmemcached/1.0/0.44/+download/libmemcached-0.44.tar.gz
$ tar xvzf libmemcached-0.44tar.gz
$ cd libmemcached-0.44
$ ./configure
$ make
$ sudo make install
libmemcached 默认安装在/usr/local/,头文件安装在/usr/local/include/libmemcachde/,动态库默认安装在/usr/local/lib/下。
我在这儿下的:https://launchpadlibrarian.net/165454254/libmemcached-1.0.18.tar.gz
注:
如果报”./libmemcached-1.0/memcached.h:46:27: error: tr1/cinttypes: No such file or directory”错误,则需要升级gcc版本.
处理如下:
yum install gcc44 gcc44-c++ libstdc++44-devel
export CC=/usr/bin/gcc44
export CXX=/usr/bin/g++44
重新编译安装libmemcached-1.0.9
关键信息:error: tr1/cinttypes: No such file or directory
报错原因:libmemcached需要 gcc 4.2 以上版本才可编译,而centos 5.4 的gcc版本只有4.1 ,详见:https://bugs.launchpad.net/libmemcached/+bug/1076181
解决方法:安装gcc44的扩展包,详见:http://gearman.info/build/centos5-8.html
export就是在于此,把这个gcc和g++的版本号给提上去,以方便这个memcached的编译:
/usr/bin/gcc44 -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-1) (GCC)
gcc -v
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
/usr/bin/g++44 -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-1) (GCC)
g++ -v
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
——————————————————————————————————————————————————————————
这个问题在安gearman时也遇到过,升级gcc,参考连接: http://jackxiang.com/post/7693/ ,软链接如下所示:
export CC=/usr/bin/gcc44 or export CC=/usr/bin/gcc
export CXX=/usr/bin/g++44
./configure && make && make install
./configure && make && make install
/usr/bin/install -c -m 644 support/libmemcached.pc '/usr/local/lib/pkgconfig'
make[2]: Leaving directory `/tmp/testmemcachedcpp/libmemcached-1.0.18'
make[1]: Leaving directory `/tmp/testmemcachedcpp/libmemcached-1.0.18'
g++ -o testmemcached testmemcached.cpp -lmemcached
In file included from /usr/local/include/libmemcached/memcached.h:39,
from testmemcached.cpp:6:
/usr/local/include/libmemcached-1.0/memcached.h:46:23: error: cinttypes: No such file or directory
明天再整下,估计是so没有给ldd进来...
2、libmemcached简单测试使用
编译:g++ -o testmemcached testmemcached.cpp -lmemcached
运行:./testmemcached
结果:Save data:value sucessful!
Get value:value sucessful!
Delete key:key sucessful!
实践编译一下:
g++ -o testmemcached testmemcached.cpp -lmemcached
In file included from /usr/local/include/libmemcached/memcached.h:39,
from testmemcached.cpp:6:
/usr/local/include/libmemcached-1.0/memcached.h:46:23: error: cinttypes: No such file or directory
看来还得重新export一次新的编译器,因为昨天的关了终端,今天的又没了:
export CC=/usr/bin/gcc44 or export CC=/usr/bin/gcc //这行有问题~
export CXX=/usr/bin/g++44
g++ -o testmemcached testmemcached.cpp -lmemcached
为何还是不行?
echo $CC
/usr/bin/gcc //没变,这儿有问题,再重新设置一次,查到上面这个or有问题:export CC=/usr/bin/gcc44。
# echo $CXX
/usr/bin/g++44 //变了
重新设置,好了:
export CC=/usr/bin/gcc44
/usr/bin/gcc44
继续折腾,/usr/bin/gcc44 -o testmemcached testmemcached.cpp -lmemcached
In file included from /usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/cinttypes:35,
from /usr/local/include/libmemcached-1.0/memcached.h:46,
from /usr/local/include/libmemcached/memcached.h:39,
from testmemcached.cpp:6:
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/c++0x_warning.h:31:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
#error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x.
加上:-lpthread -std=c++0x ,解决如下:
g++ -o testmemcached testmemcached.cpp -lmemcached -lpthread -std=c++0x
/usr/bin/ld: cannot find -lmemcached
collect2: ld returned 1 exit status
也就是说编译器并不能从ldconfig 里得知,其lib在哪儿(及时把Lib路径加入到/etc/ld.so.conf.d/libmemcache.conf),得指定:
在网上找了一下,发现是这样的:http://blog.163.com/guixl_001/blog/static/4176410420121021111117987/ 里说得加一个新的参数,是和宏相关,那就加了,
指定一个新的参数:-std=c++0x :
/usr/bin/gcc44 -o testmemcached testmemcached.cpp -lmemcached -std=c++0x
/usr/local/lib/libmemcached.so: undefined reference to `pthread_once'
collect2: ld returned 1 exit status
/usr/bin/g++44 -o testmemcached testmemcached.cpp -lmemcached -std=c++0x
/usr/local/lib/libmemcached.so: undefined reference to `pthread_once'
怎样彻底解决"undefined reference to `pthread_create'"问题 ,说是加个: -lrt ,这一看就是那个memcached的库包含了这个文件:#include<pthread.h>
来源参考:
http://bbs.chinaunix.net/thread-1586752-1-1.html
于是Ok啦,最终O了,如下:
[root@test testmemcachedcpp]# /usr/bin/g++44 -o testmemcached testmemcached.cpp -lmemcached -lrt -std=c++0x
[root@test testmemcachedcpp]#
运行一下试试:
[root@test testmemcachedcpp]# ./testmemcached
./testmemcached: error while loading shared libraries: libmemcached.so.11: cannot open shared object file: No such file or directory
[root@test /]# find . -name "libmemcached.so.11"
./usr/local/lib/libmemcached.so.11
打开配置文件 vi /etc/ld.so.conf
加上一行:/usr/local/lib
执行/sbin/ldconfig /etc/ld.so.conf
[root@test testmemcachedcpp]# /sbin/ldconfig /etc/ld.so.conf
[root@test testmemcachedcpp]# ./testmemcached
[root@test testmemcachedcpp]#
没报错了~,用gdb看一下 加个-g参数:
/usr/bin/g++44 -g -o testmemcached testmemcached.cpp -lmemcached -lrt -std=c++0x
发现localhost没有开11211,于是找了一台机器把ip和端口写上,重新编译一次后运行Ok,如下:
[root@test testmemcachedcpp]# ./testmemcached
Save data:value sucessful!
Get value:value sucessful!
少了一个删除成功的,简单调试一下:
(gdb) n
Get value:value sucessful!
50 rc=memcached_delete(memc,key.c_str(),key_length,expiration);
(gdb) p key.c_str()
$5 = 0x184372e8 "key"
(gdb) p key_length
$6 = 3
(gdb) n
51 if(rc==MEMCACHED_SUCCESS)
(gdb) p rc
$3 = MEMCACHED_INVALID_ARGUMENTS
也就是调这个函数的参数不对,返回不是MEMCACHED_SUCCESS,所以没有打印出:cout<<"Delete key:"<<key<<" sucessful!"<<endl;
####################新的代码里grep了一下该方法###########################
./tests/mem_udp.cc: memcached_delete(memc, test_literal_param("foo"), 0));
./libmemcached-1.0/memcached.hpp: return memcached_success(memcached_delete(memc_, key.c_str(), key.length(), 0));
./libmemcached-1.0/memcached.hpp: return memcached_success(memcached_delete(memc_,
./tests/libmemcached-1.0/replication.cc: memcached_return_t del_rc= memcached_delete(memc_replicated,
./tests/libmemcached-1.0/mem_functions.cc: rc= memcached_delete(memc, "foo", 3, 1);
./tests/libmemcached-1.0/mem_functions.cc: test_compare(MEMCACHED_BUFFERED, (rc= memcached_delete(memc, "foo", 3, 0)));
./tests/libmemcached-1.0/mem_functions.cc: test_compare(MEMCACHED_SUCCESS, memcached_delete(memc, "foo", 3, 0));
./tests/libmemcached-1.0/mem_functions.cc: test_compare(MEMCACHED_NOTFOUND, memcached_delete(memc, "foo", 3, 0));
####################################################################
于是修改为下面这样:
//rc=memcached_delete(memc,key.c_str(),key_length,expiration);
rc=memcached_delete(memc,key.c_str(),key_length,0);
./testmemcached
Save data:value2 sucessful!
Get value:value2 sucessful!
Delete key:key sucessful!
刚才失败时有值,现在运行后没值了,给成功删除了:
[root@localhost ~]# telnet 192.168.108.7 11211
Escape character is '^]'.
get key
VALUE key 0 5
value
END
get key
END
后面怎么结合c的socket 及epoll进行进程/线程调试就不再细说了,我也在摸索中,应该也有相关的调试办法,但这儿说明这个memcached搞个新的gcc版本库才能编译确实带了相当多编译及配置上的的麻烦~
最后,用C函数里的add函数实现类php的memcache的扩展的原子操作函数,如下:
原子操作方法,假如有add后就不能再add,必须删除后才能add,这个可以用作锁:
./libmemcached-1.0.18/libmemcached-1.0/memcached.hpp:
和php的add函数一样第一次运行时没有问题此时值设置成功,再运行add时一次就add不进去,add设置进去后,用set是能重新设置进去的,只是用add原子操作是不行的,用它来做锁很好使:
1)代码片段:
2)运行情况:
[root@test testmemcachedcpp]# gdb testmemcached
b 41
r
Add data:value unsucessful,Perhaps add key before set !
(gdb) p rc
$2 = MEMCACHED_NOTSTORED
但是能够set进去:
42 rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
(gdb) n
43 if(rc==MEMCACHED_SUCCESS)
(gdb) p rc
$3 = MEMCACHED_SUCCESS
EOF
对add后的键对应的值,再用set方法是可以设置的,如下:
string key = "key2";
string value = "jackxiang";
rc=memcached_add(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
后再修改这个值:
value = "xiangdong";
rc=memcached_set(memc,key.c_str(),key.length(),value.c_str(),value.length(),expiration,flags);
用gdb的断点跟踪一下并用telnet在设置后查看,如下:
[root@localhost ~]# telnet 192.168.108.7 11211
Escape character is '^]'.
get key2
END
get key2
VALUE key2 0 9
jackxiang
END
get key2
VALUE key2 0 9
xiangdong
END
听说,在下载客户端libmemcached-1.0.18/tests 下有测试列子,也可参考。比如cpp_example.cc
ls ~+/cpp_example.cc
/tmp/testmemcachedcpp/libmemcached-1.0.18/tests/cpp_example.cc
摘自:http://www.cppblog.com/kefeng/archive/2010/10/11/129422.html
http://blog.chinaunix.net/uid-52437-id-2108905.html
后发现这个哥们写的文章很详细,http://blog.chinaunix.net/uid-20548989-id-1667248.html
加入add后,rc=MEMCACHED_NOTSTORED情况,代码贴下面:
CentOS 7 使用经验分享,CentOS 7 修改开机顺序,CentOS7 采用的是systemd,centos7上systemd详解。
Unix/LinuxC技术 jackxiang 2015-2-9 09:17
一、记录CentOS 7与以往不同的地方
由于公司这一期的产品准备支持的环境有CentOS 7、MySql 5.6、Java 8、Tomcat 8等等,并且因为人员严重不足,我本月的开发任务在原有的基础上又加上了好多环境检证的工作。
因为在这次环境检证过程中遇到了不少困难,特此记录一下。
重点:记录CentOS 7与以往不同的地方
1.取消ifconfig,使用ip addr 查看IP地址。
2.使用firewalld 取代 iptables。
3.系统默认编码设置文件,由/etc/sysconfig/i18n 更改为 /etc/locale.conf
___________________________详细介绍使用感受__________________________
因为系统安装时网络连接设置的自动获取,先改成静态ip。配置方法如下:
第一步,vi /etc/sysconfig/network-scripts/ifcfg-enp0s25;
设置内容:
解释:
IPADDR0 --> ip
GATEWAY0 --> 网关
DNS1 -->DNS
第二步,重启网络服务 -->service network restart(特别重要,千万不要忘记。)
第三步.查看ip ip addr,再 ping 一下网络。这是网络配置基本就完成了。
事情进展到这里貌似也没什么难过的坎,我开始配置防火墙。先使用 iptables status 查看防火墙状态,
我去,什么鬼?我敲错了?有一次仔细核对了每一个字母,完全没错啊!!!不管怎么说,先看一下iptables脚本是否还存在吧。
咦,iptables脚本不见了。不用多想一定是CentOS 7使用了新型的防火墙,立即百度。
※度娘解惑:CentOS 7使用firewalld 取代 iptables。使用命令行工具firewalld-cmd获取firewalld状态,$ firwall-cmd --state。
摘自:http://www.linuxidc.com/Linux/2015-01/111998.htm
————————————————————————————————————————————————————————————
二、修改开机启动顺序:
http://wenku.baidu.com/link?url=HXBiVyBOB_p1oAEN0Wunreof9Fff9dy4s6abRC_Zqq6Cm1ZbOvmgXrcQ3kC3OTLmDq-FwrjeK-Fw9zgoZ3yBGGyA_ikGSRtjvhjcS_dEaQu
————————————————————————————————————————————————————————————
三、 CentOS 7 巨大变动之 systemd 取代 SysV的Init
systemd是什么
首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序。
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
(1)以Ubuntu为代表的Linux发行版采用upstart。
(2)以7.0版本之前的CentOS为代表的System V init。
(3)CentOS7.0版本的systemd。
下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。
CentOS6.5采用的是systemV init
CentOS7 采用的是systemd:
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
(1)以Ubuntu为代表的Linux发行版采用upstart。
(2)以7.0版本之前的CentOS为代表的System V init。
(3)CentOS7.0版本的systemd。
下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。
CentOS6.5采用的是systemV init
CentOS7 采用的是systemd
摘自:http://blog.csdn.net/smstong/article/details/39317491
参考:https://blog.linuxeye.com/400.html
=======================centos7上systemd详解============================
CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变, 也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多。
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统 system 和用户 user 之分, 即:/usr/lib/systemd/system 和 /usr/lib/systemd/user
配置文件
这里我们先要说明一下unit的文件位置,一般主要有三个目录:
/lib/systemd/system
/run/systemd/system
/etc/systemd/system
这三个目录的配置文件优先级依次从低到高,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。 系统安装时,默认会将unit文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:
在/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。
在/etc/systemd/system下面创建nginx.service.d目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。推荐这种做法。
/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。
服务配置
每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],就以nginx为例吧,具体内容如下:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置项说明
下面分别解释下着三部分的含义
[Unit]
Description : 服务的简单描述
Documentation : 服务文档
After= : 依赖,仅当依赖的服务启动之后再启动自定义的服务单元
[Service]
Type : 启动类型simple、forking、oneshot、notify、dbus
Type=simple(默认值):systemd认为该服务将立即启动,服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求, 使用此类型启动即可。使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号,这一通知的实现由 libsystemd-daemon.so 提供
Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
PIDFile : pid文件路径
ExecStartPre :启动前要做什么,上文中是测试配置文件 -t
ExecStart:启动
ExecReload:重载
ExecStop:停止
PrivateTmp:True表示给服务分配独立的临时空间
[Install]
WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁?上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户。
每一个.target实际上是链接到我们单位文件的集合,当我们执行
systemctl enable nginx.service
就会在 /etc/systemd/system/multi-user.target.wants/ 目录下新建一个 /usr/lib/systemd/system/nginx.service 文件的链接。
systemctl status logstash.service
● logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-07-16 10:51:32 CST; 29min ago
systemctl is-enabled logstash.service
enabled
/etc/systemd/system/logstash.service
操作示例
下面是几个最常用的service操作:
# 自启动
systemctl enable nginx.service
# 禁止自启动
systemctl disable nginx.service
# 启动服务
systemctl start nginx.service
# 停止服务
systemctl stop nginx.service
# 重启服务
systemctl restart nginx.service
# 查看Unit定义文件
systemctl cat nginx.service
# 编辑Unit定义文件
systemctl edit nginx.service
# 重新加载Unit定义文件
systemctl reload nginx.service
# 列出已启动的所有unit,就是已经被加载到内存中
systemctl list-units
# 列出系统已经安装的所有unit,包括那些没有被加载到内存中的unit
systemctl list-unit-files
# 查看服务的日志
journalctl -u nginx.service # 还可以配合`-b`一起使用,只查看自本次系统启动以来的日志
# 查看所有target下的unit
systemctl list-unit-files --type=target
# 查看默认target,即默认的运行级别。对应于旧的`runlevel`命令
systemctl get-default
# 设置默认的target
systemctl set-default multi-user.target
# 查看某一target下的unit
systemctl list-dependencies multi-user.target
# 切换target,不属于新target的unit都会被停止
systemctl isolate multi-user.target
systemctl poweroff # 关机
systemctl reboot # 重启
systemctl rescue # 进入rescue模式
参考资料
create systemd unit files
NGINX systemd service file
Systemd introduction
From:https://www.xncoding.com/2016/06/07/linux/systemd.html
由于公司这一期的产品准备支持的环境有CentOS 7、MySql 5.6、Java 8、Tomcat 8等等,并且因为人员严重不足,我本月的开发任务在原有的基础上又加上了好多环境检证的工作。
因为在这次环境检证过程中遇到了不少困难,特此记录一下。
重点:记录CentOS 7与以往不同的地方
1.取消ifconfig,使用ip addr 查看IP地址。
2.使用firewalld 取代 iptables。
3.系统默认编码设置文件,由/etc/sysconfig/i18n 更改为 /etc/locale.conf
___________________________详细介绍使用感受__________________________
因为系统安装时网络连接设置的自动获取,先改成静态ip。配置方法如下:
第一步,vi /etc/sysconfig/network-scripts/ifcfg-enp0s25;
设置内容:
解释:
IPADDR0 --> ip
GATEWAY0 --> 网关
DNS1 -->DNS
第二步,重启网络服务 -->service network restart(特别重要,千万不要忘记。)
第三步.查看ip ip addr,再 ping 一下网络。这是网络配置基本就完成了。
事情进展到这里貌似也没什么难过的坎,我开始配置防火墙。先使用 iptables status 查看防火墙状态,
我去,什么鬼?我敲错了?有一次仔细核对了每一个字母,完全没错啊!!!不管怎么说,先看一下iptables脚本是否还存在吧。
咦,iptables脚本不见了。不用多想一定是CentOS 7使用了新型的防火墙,立即百度。
※度娘解惑:CentOS 7使用firewalld 取代 iptables。使用命令行工具firewalld-cmd获取firewalld状态,$ firwall-cmd --state。
摘自:http://www.linuxidc.com/Linux/2015-01/111998.htm
————————————————————————————————————————————————————————————
二、修改开机启动顺序:
http://wenku.baidu.com/link?url=HXBiVyBOB_p1oAEN0Wunreof9Fff9dy4s6abRC_Zqq6Cm1ZbOvmgXrcQ3kC3OTLmDq-FwrjeK-Fw9zgoZ3yBGGyA_ikGSRtjvhjcS_dEaQu
————————————————————————————————————————————————————————————
三、 CentOS 7 巨大变动之 systemd 取代 SysV的Init
systemd是什么
首先systmed是一个用户空间的程序,属于应用程序,不属于Linux内核范畴,Linux内核的主要特征在所有发行版中是统一的,厂商可以自由改变的是用户空间的应用程序。
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
(1)以Ubuntu为代表的Linux发行版采用upstart。
(2)以7.0版本之前的CentOS为代表的System V init。
(3)CentOS7.0版本的systemd。
下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。
CentOS6.5采用的是systemV init
CentOS7 采用的是systemd:
Linux内核加载启动后,用户空间的第一个进程就是初始化进程,这个程序的物理文件约定位于/sbin/init,当然也可以通过传递内核参数来让内核启动指定的程序。这个进程的特点是进程号为1,代表第一个运行的用户空间进程。不同发行版采用了不同的启动程序,主要有以下几种主流选择:
(1)以Ubuntu为代表的Linux发行版采用upstart。
(2)以7.0版本之前的CentOS为代表的System V init。
(3)CentOS7.0版本的systemd。
下面是CentOS6.5和CentOS7两个版本初始化进程的信息截图。
CentOS6.5采用的是systemV init
CentOS7 采用的是systemd
摘自:http://blog.csdn.net/smstong/article/details/39317491
参考:https://blog.linuxeye.com/400.html
=======================centos7上systemd详解============================
CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往系统服务的/etc/init.d的启动脚本的方式就此改变, 也大幅提高了系统服务的运行效率。但服务的配置和以往也发生了极大的不同,同时变的简单而易用了许多。
CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统 system 和用户 user 之分, 即:/usr/lib/systemd/system 和 /usr/lib/systemd/user
配置文件
这里我们先要说明一下unit的文件位置,一般主要有三个目录:
/lib/systemd/system
/run/systemd/system
/etc/systemd/system
这三个目录的配置文件优先级依次从低到高,如果同一选项三个地方都配置了,优先级高的会覆盖优先级低的。 系统安装时,默认会将unit文件放在/lib/systemd/system目录。如果我们想要修改系统默认的配置,比如nginx.service,一般有两种方法:
在/etc/systemd/system目录下创建nginx.service文件,里面写上我们自己的配置。
在/etc/systemd/system下面创建nginx.service.d目录,在这个目录里面新建任何以.conf结尾的文件,然后写入我们自己的配置。推荐这种做法。
/run/systemd/system这个目录一般是进程在运行时动态创建unit文件的目录,一般很少修改,除非是修改程序运行时的一些参数时,即Session级别的,才在这里做修改。
服务配置
每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install],就以nginx为例吧,具体内容如下:
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置项说明
下面分别解释下着三部分的含义
[Unit]
Description : 服务的简单描述
Documentation : 服务文档
After= : 依赖,仅当依赖的服务启动之后再启动自定义的服务单元
[Service]
Type : 启动类型simple、forking、oneshot、notify、dbus
Type=simple(默认值):systemd认为该服务将立即启动,服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型
Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求, 使用此类型启动即可。使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号,这一通知的实现由 libsystemd-daemon.so 提供
Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
PIDFile : pid文件路径
ExecStartPre :启动前要做什么,上文中是测试配置文件 -t
ExecStart:启动
ExecReload:重载
ExecStop:停止
PrivateTmp:True表示给服务分配独立的临时空间
[Install]
WantedBy:服务安装的用户模式,从字面上看,就是想要使用这个服务的有是谁?上文中使用的是:multi-user.target ,就是指想要使用这个服务的目录是多用户。
每一个.target实际上是链接到我们单位文件的集合,当我们执行
systemctl enable nginx.service
就会在 /etc/systemd/system/multi-user.target.wants/ 目录下新建一个 /usr/lib/systemd/system/nginx.service 文件的链接。
systemctl status logstash.service
● logstash.service - logstash
Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-07-16 10:51:32 CST; 29min ago
systemctl is-enabled logstash.service
enabled
/etc/systemd/system/logstash.service
操作示例
下面是几个最常用的service操作:
# 自启动
systemctl enable nginx.service
# 禁止自启动
systemctl disable nginx.service
# 启动服务
systemctl start nginx.service
# 停止服务
systemctl stop nginx.service
# 重启服务
systemctl restart nginx.service
# 查看Unit定义文件
systemctl cat nginx.service
# 编辑Unit定义文件
systemctl edit nginx.service
# 重新加载Unit定义文件
systemctl reload nginx.service
# 列出已启动的所有unit,就是已经被加载到内存中
systemctl list-units
# 列出系统已经安装的所有unit,包括那些没有被加载到内存中的unit
systemctl list-unit-files
# 查看服务的日志
journalctl -u nginx.service # 还可以配合`-b`一起使用,只查看自本次系统启动以来的日志
# 查看所有target下的unit
systemctl list-unit-files --type=target
# 查看默认target,即默认的运行级别。对应于旧的`runlevel`命令
systemctl get-default
# 设置默认的target
systemctl set-default multi-user.target
# 查看某一target下的unit
systemctl list-dependencies multi-user.target
# 切换target,不属于新target的unit都会被停止
systemctl isolate multi-user.target
systemctl poweroff # 关机
systemctl reboot # 重启
systemctl rescue # 进入rescue模式
参考资料
create systemd unit files
NGINX systemd service file
Systemd introduction
From:https://www.xncoding.com/2016/06/07/linux/systemd.html
(转)关于信号量sem_wait的整理
Unix/LinuxC技术 jackxiang 2015-2-6 17:25
(转) linux管道与套接字的调试工具
Unix/LinuxC技术 jackxiang 2015-2-3 09:17
背景:多进程时用管道进行子进程间或子进程于线程之间通讯,出现父进程已经双close后还是出现了当有请求来时,子进程写入处理线程时管道阻塞住了,怎么办,管道调试试试看了,学习备忘下。
1)管道的调试
阅读全文
1)管道的调试

背景:nginx.conf里指定了nginx的error_log:error_log /data/logs/nginx/nginx_error.log; 该文件不在nginx的logs下面,于是我把这个logs文件夹都给删除了: rm -Rf /usr/local/nginx/logs,发现在启动时会会报一个alert错,nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)的研究探讨。
阅读全文

背景:本人的vps服务器的带宽是5M,但是经常出现很多*163data.com.cn的访问量,还经常是访问首页。
用如下命令看,还有google也来凑热闹,如下:
结果都是:
11:29:58.515423 IP (tos 0x0, ttl 121, id 43931, offset 0, flags [DF], proto 6, length: 92) 14.122.61.58.broad.sz.gd.dynamic.163data.com.cn.31292 > *.*.*.*.ssh: P 6137:6189(52) ack 1219120 win 16448
google-public-dns-a.google.com.domain > jackxiang.com.50570: [udp sum ok] 1064 q: PTR? 111.15.181.220.in-addr.arpa. 1/0/0 111.15.181.220.in-addr.arpa. PTR m15-111.126.com. (74)
都是上面的输出.
用linux下的iftop查看,随便抓两个IP在ip138.com查一下,吓一跳:
55.10.89.110.broad.pt.fj.dynamic.163data.com.cn
您查询的IP:55.10.89.110
本站主数据:美国 弗吉尼亚美国陆军部队
参考数据一:美国 弗吉尼亚美国陆军部队
185.5.43.120.broad.pt.fj.dynamic.163data.com.cn
您查询的IP:185.5.43.120
本站主数据:俄罗斯
参考数据一:RIPE
197.192.26.117.broad.pt.fj.dynamic.163data.com.cn
您查询的IP:197.192.26.117
本站主数据:埃及
参考数据一:埃及
用了百度云加速,这个没啥问题:
jackxiang.com => 183.60.235.58 1.27Mb 1.12Mb 941Kb
您查询的IP:183.60.235.58
本站主数据:广东省佛山市 百度云加速节点 电信
参考数据一:广东省深圳市 电信
——————————————————————————————————————————————————————————————
第一:是不是被攻击了?
首先163data是电信的上网导航,如果你家用的是电信宽带并且走电信的DNS,默认都会显示成163data登陆的,这个就和代理服务器差不多。
那为何有美国的IP在里面呢?我晕,难不成真有攻击黑客吗,在弗吉尼亚美国陆军部队?通过电信来到我们中国到联通的机房?纳闷。
第二:这是电信动态IP地址的反向解析名字.
广州电信做了adsl等动态ip的反向解析,要命的是,没做正向解析。
能从IP反解到IP.broad.gz.gd.dynamic.163data.com.cn
但从反IP.broad.gz.gd.dynamic.163data.com.cn却不能解析到IP。
域名都过期了,不知道电信干什么的....电信从来不会主动为用户做反解的,部分地区是收费的,并且还要看用户类型。
___________________________________________________________________________________________________
不少站长不知道163data.com.cn是什么,在搜索引擎上搜索也找不到几条满意的结果,但是每天有大量来自163data.com.cn的用户访问自己的网站,怕被采集或者被攻击,所以很着急。
我之前也不知道,后来在使用一款WordPress的插件时(装了个WordPress打分插件), 得知自己的IP地址也属于xxx.dynamic.163data.com.cn的形式。所以xxx.163data.com.cn形式的IP地址,其实 是每个中国电信上网用户的IP反向解析地址,中国电信之所以要把IP地址进行动态反向解析,主要是为了防止垃圾邮件,减少黑客攻击等等。
本页末尾的小插件显示出了您当前的IP地址和HostName(如果看不到请稍等片刻,再按F5刷新,可能需要多刷新几次),我的HostName就是xxx.broad.xw.sh.dynamic.163data.com.cn的样子。
(你也可以登录IP Chicken查看自己的IP和Name Address,我登录上去后,显示了我的IP地址,和我的Name Address: xx.xx.xx.xx.broad.xw.sh.dynamic.163data.com.cn。)
所以每天有大量来自163data.com.cn的访客访问网站不应该担心,而应该高兴,因为那都是通过电信网络上网的网友啊,呵呵。如果你屏蔽了163data.com.cn,那么所有电信用户都访问不了你的网站了。
IP地址反向解析就是服务器根据邮件信头文件显示的IP地址进行反向解析,如果反向解析这个IP所对应的域名是许可的域名,就接受这封邮件。如果反向解析发现这个IP没有对应到许可的域名,就拒接邮件。
据介绍,实施动态IP地址反向解析工作可以有效防止黑客攻击和垃圾邮件、控制网络带宽、节省DNS系统资源等,有助于减少用户投诉,净化网络环境,提升网络服务质量。
用如下命令看,还有google也来凑热闹,如下:
结果都是:
11:29:58.515423 IP (tos 0x0, ttl 121, id 43931, offset 0, flags [DF], proto 6, length: 92) 14.122.61.58.broad.sz.gd.dynamic.163data.com.cn.31292 > *.*.*.*.ssh: P 6137:6189(52) ack 1219120 win 16448
google-public-dns-a.google.com.domain > jackxiang.com.50570: [udp sum ok] 1064 q: PTR? 111.15.181.220.in-addr.arpa. 1/0/0 111.15.181.220.in-addr.arpa. PTR m15-111.126.com. (74)
都是上面的输出.
用linux下的iftop查看,随便抓两个IP在ip138.com查一下,吓一跳:
55.10.89.110.broad.pt.fj.dynamic.163data.com.cn
您查询的IP:55.10.89.110
本站主数据:美国 弗吉尼亚美国陆军部队
参考数据一:美国 弗吉尼亚美国陆军部队
185.5.43.120.broad.pt.fj.dynamic.163data.com.cn
您查询的IP:185.5.43.120
本站主数据:俄罗斯
参考数据一:RIPE
197.192.26.117.broad.pt.fj.dynamic.163data.com.cn
您查询的IP:197.192.26.117
本站主数据:埃及
参考数据一:埃及
用了百度云加速,这个没啥问题:
jackxiang.com => 183.60.235.58 1.27Mb 1.12Mb 941Kb
您查询的IP:183.60.235.58
本站主数据:广东省佛山市 百度云加速节点 电信
参考数据一:广东省深圳市 电信
——————————————————————————————————————————————————————————————
第一:是不是被攻击了?
首先163data是电信的上网导航,如果你家用的是电信宽带并且走电信的DNS,默认都会显示成163data登陆的,这个就和代理服务器差不多。
那为何有美国的IP在里面呢?我晕,难不成真有攻击黑客吗,在弗吉尼亚美国陆军部队?通过电信来到我们中国到联通的机房?纳闷。
第二:这是电信动态IP地址的反向解析名字.
广州电信做了adsl等动态ip的反向解析,要命的是,没做正向解析。
能从IP反解到IP.broad.gz.gd.dynamic.163data.com.cn
但从反IP.broad.gz.gd.dynamic.163data.com.cn却不能解析到IP。
域名都过期了,不知道电信干什么的....电信从来不会主动为用户做反解的,部分地区是收费的,并且还要看用户类型。
___________________________________________________________________________________________________
不少站长不知道163data.com.cn是什么,在搜索引擎上搜索也找不到几条满意的结果,但是每天有大量来自163data.com.cn的用户访问自己的网站,怕被采集或者被攻击,所以很着急。
我之前也不知道,后来在使用一款WordPress的插件时(装了个WordPress打分插件), 得知自己的IP地址也属于xxx.dynamic.163data.com.cn的形式。所以xxx.163data.com.cn形式的IP地址,其实 是每个中国电信上网用户的IP反向解析地址,中国电信之所以要把IP地址进行动态反向解析,主要是为了防止垃圾邮件,减少黑客攻击等等。
本页末尾的小插件显示出了您当前的IP地址和HostName(如果看不到请稍等片刻,再按F5刷新,可能需要多刷新几次),我的HostName就是xxx.broad.xw.sh.dynamic.163data.com.cn的样子。
(你也可以登录IP Chicken查看自己的IP和Name Address,我登录上去后,显示了我的IP地址,和我的Name Address: xx.xx.xx.xx.broad.xw.sh.dynamic.163data.com.cn。)
所以每天有大量来自163data.com.cn的访客访问网站不应该担心,而应该高兴,因为那都是通过电信网络上网的网友啊,呵呵。如果你屏蔽了163data.com.cn,那么所有电信用户都访问不了你的网站了。
IP地址反向解析就是服务器根据邮件信头文件显示的IP地址进行反向解析,如果反向解析这个IP所对应的域名是许可的域名,就接受这封邮件。如果反向解析发现这个IP没有对应到许可的域名,就拒接邮件。
据介绍,实施动态IP地址反向解析工作可以有效防止黑客攻击和垃圾邮件、控制网络带宽、节省DNS系统资源等,有助于减少用户投诉,净化网络环境,提升网络服务质量。
打嗝不止怎么办?试试这8个小窍门,好有用哦!
打嗝这么尴尬的事,必须得止住哦!那么打嗝不止该怎么办?小编给你支招。
1、喝水弯腰法
喝几口温开水,慢慢咽下,并做弯腰90度的动作10~15次。因胃部离膈肌较近,可从内部温暖膈肌,在弯腰时,内脏还会对膈肌起到按摩作用,缓解膈肌痉挛,达到止嗝的目的。
2、伸拉舌头法
打嗝不止时,用一块干净纱布垫在舌头上,用手指捏住舌头向外伸拉。此时,会感到腹部有气体上升,打嗝自然消除。
3、采用深呼吸的方法
比如在进食时发生呃逆可以暂停进食,作几次深呼吸,往往在短时内能止住。
呃逆频繁时,可自己或请旁人用手指压迫两侧的〝少商〞穴。〝少商〞穴位于大拇指甲根部桡侧面,距指甲缘约0.6公分,在黑白肉际交界处。压迫时要用一定的力量,使患者有明显酸痛感。患者自行压迫可两手交替进行。
4、屏气法
5、按摩有效治呃逆
取一根细棒,一端裹上棉花(如手边无棒,可用竹筷的细端包上棉花代替),放入患者口中,用其软端按端前软颚正中线一点,此点的位置正好在硬、软颚交界处稍后面。一般按摩一分钟就能有效地控制呃逆。
6、惊吓法
趁不注意猛拍一下打嗝者的后背,也能止嗝。因为惊吓作为一种强烈的情绪刺激,可通过皮层传至皮下中枢,抑止膈肌痉挛。但有高血压、心脏病人应慎用。
7、纸袋呼气法
用一个小塑胶袋,罩住自己的口鼻,进行3~5次的深呼吸。用呼出的二氧化碳重复吸入,增加血液中二氧化碳的浓度,来调节,抑制打嗝。
8、舌下放糖法
吃一匙糖,干吞(不配水),可以在数分钟后止住打嗝。糖在口腔里可能改变了原来的神经冲动,以阻挠横膈膜的肌肉作间歇性地收缩。
打嗝这么尴尬的事,必须得止住哦!那么打嗝不止该怎么办?小编给你支招。
1、喝水弯腰法
喝几口温开水,慢慢咽下,并做弯腰90度的动作10~15次。因胃部离膈肌较近,可从内部温暖膈肌,在弯腰时,内脏还会对膈肌起到按摩作用,缓解膈肌痉挛,达到止嗝的目的。
2、伸拉舌头法
打嗝不止时,用一块干净纱布垫在舌头上,用手指捏住舌头向外伸拉。此时,会感到腹部有气体上升,打嗝自然消除。
3、采用深呼吸的方法
比如在进食时发生呃逆可以暂停进食,作几次深呼吸,往往在短时内能止住。
呃逆频繁时,可自己或请旁人用手指压迫两侧的〝少商〞穴。〝少商〞穴位于大拇指甲根部桡侧面,距指甲缘约0.6公分,在黑白肉际交界处。压迫时要用一定的力量,使患者有明显酸痛感。患者自行压迫可两手交替进行。
4、屏气法
5、按摩有效治呃逆
取一根细棒,一端裹上棉花(如手边无棒,可用竹筷的细端包上棉花代替),放入患者口中,用其软端按端前软颚正中线一点,此点的位置正好在硬、软颚交界处稍后面。一般按摩一分钟就能有效地控制呃逆。
6、惊吓法
趁不注意猛拍一下打嗝者的后背,也能止嗝。因为惊吓作为一种强烈的情绪刺激,可通过皮层传至皮下中枢,抑止膈肌痉挛。但有高血压、心脏病人应慎用。
7、纸袋呼气法
用一个小塑胶袋,罩住自己的口鼻,进行3~5次的深呼吸。用呼出的二氧化碳重复吸入,增加血液中二氧化碳的浓度,来调节,抑制打嗝。
8、舌下放糖法
吃一匙糖,干吞(不配水),可以在数分钟后止住打嗝。糖在口腔里可能改变了原来的神经冲动,以阻挠横膈膜的肌肉作间歇性地收缩。
1.单击“开始”,依次指向“所有程序”、“附件”、“系统工具”,然后单击“磁盘清理 C:
下面来罗列一下判断远端已经断开的方法:
法一:
当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。
法二:
struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开
法三:
若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。
法四:
int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误
法五:
自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。
摘自:http://blog.csdn.net/god2469/article/details/8801356
使用 epoll或poll ,如何确定 与客户端的链接断开 ?
http://bbs.csdn.net/topics/240073448
epoll事件检测:
http://www.360doc.com/content/09/0812/09/1894_4858884.shtml
epoll的各个事件触发条件测试:
http://www.cppblog.com/yangsf5/archive/2009/03/12/76353.html
利用epoll和多进程解决高并发问题 :
http://blog.csdn.net/ypbsyy/article/details/38046267
法一:
当recv()返回值小于等于0时,socket连接断开。但是还需要判断 errno是否等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,socket连接还是正常的,不应close掉socket连接。
法二:
struct tcp_info info;
int len=sizeof(info);
getsockopt(sock, IPPROTO_TCP, TCP_INFO, &info, (socklen_t *)&len);
if((info.tcpi_state==TCP_ESTABLISHED)) 则说明未断开 else 断开
法三:
若使用了select等系统函数,若远端断开,则select返回1,recv返回0则断开。其他注意事项同法一。
法四:
int keepAlive = 1; // 开启keepalive属性
int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive));
setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));
setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
设置后,若断开,则在使用该socket读写时立即失败,并返回ETIMEDOUT错误
法五:
自己实现一个心跳检测,一定时间内未收到自定义的心跳包则标记为已断开。
摘自:http://blog.csdn.net/god2469/article/details/8801356
使用 epoll或poll ,如何确定 与客户端的链接断开 ?
http://bbs.csdn.net/topics/240073448
epoll事件检测:
http://www.360doc.com/content/09/0812/09/1894_4858884.shtml
epoll的各个事件触发条件测试:
http://www.cppblog.com/yangsf5/archive/2009/03/12/76353.html
利用epoll和多进程解决高并发问题 :
http://blog.csdn.net/ypbsyy/article/details/38046267
问题:我把图片弄成了超大图标都看不到图,只是个图标,之前都不会这样,文件夹设置那里也没有在”始终显示图标,怎么办?
解决方案:
第一:
打开计算机—》组织—》文件夹和搜索选项—》查看(tab标签)—》去掉”始终显示图标,不显示缩略图”的对勾;
第二:
我的电脑 属性 高级 性能 设置 在其中的“显示缩略图,而不是显示图标”中打勾。
看看,是不是有了!哈哈。
分别摘自:
http://www.2cto.com/os/201311/254368.html
http://zhidao.baidu.com/link?url=N1BO7RyTvMJNMjX4LMlONCiyBRuEDMN-7QaMdEUSumWMW3FS13yhJysiFD3sDaOHwHK0ozit3__UPUb24v6aZq
解决方案:
第一:
打开计算机—》组织—》文件夹和搜索选项—》查看(tab标签)—》去掉”始终显示图标,不显示缩略图”的对勾;
第二:
我的电脑 属性 高级 性能 设置 在其中的“显示缩略图,而不是显示图标”中打勾。
看看,是不是有了!哈哈。
分别摘自:
http://www.2cto.com/os/201311/254368.html
http://zhidao.baidu.com/link?url=N1BO7RyTvMJNMjX4LMlONCiyBRuEDMN-7QaMdEUSumWMW3FS13yhJysiFD3sDaOHwHK0ozit3__UPUb24v6aZq
PHP配置文件PHP.ini里的session.cookie_path 与session.save_path 有什么区别
Php/Js/Shell/Go jackxiang 2015-1-30 22:30
背景:今天看自己的vps机器的PHP目录下有php -i|grep cookie_path 是session.cookie_path => / => / ,在目录:/usr/local/php/var/session 里有很多session文件,可一看配置: php -i|grep save_path session.save_path => no value => no value ,于是有一问:
___________________________________________________________________________
session.cookie_path 与session.save_path 有什么区别?
————————————————————————————
有区别
session.save_path 是保存session的路径
session.cookie_path 指定了要session会话 cookie 的有效路径 可查看setcookie第四参数关于cookie有效路径设置相关信息
session ID通过cookie传递时 .. 要创建cookie, session.cookie_path就是设置默认的cookie有效路径
平时的cookie创建如 setcookie ("Test", "12345", time()+3600, "/wwwroot/abc/", ".example.com", 1 ); "/wwwroot/abc/" 就是该cookie只在此路径下有效
由于session创建cookie并没有调用setcookie, 所以创建cookie的所需参数先在ini里的session.cookie .. 进行设置 ..
摘自:http://bbs.phpchina.com/thread-167626-1-1.html
——————————————————————————————————————————————————
后面,我把位置给修改了:
/data/session
session.save_path = "/data/session"
service php-fpm restart
Gracefully shutting down php-fpm .. done
php -i|grep session.save_path
session.save_path => /data/session => /data/session
___________________________________________________________________________
session.cookie_path 与session.save_path 有什么区别?
————————————————————————————
有区别
session.save_path 是保存session的路径
session.cookie_path 指定了要session会话 cookie 的有效路径 可查看setcookie第四参数关于cookie有效路径设置相关信息
session ID通过cookie传递时 .. 要创建cookie, session.cookie_path就是设置默认的cookie有效路径
平时的cookie创建如 setcookie ("Test", "12345", time()+3600, "/wwwroot/abc/", ".example.com", 1 ); "/wwwroot/abc/" 就是该cookie只在此路径下有效
由于session创建cookie并没有调用setcookie, 所以创建cookie的所需参数先在ini里的session.cookie .. 进行设置 ..
摘自:http://bbs.phpchina.com/thread-167626-1-1.html
——————————————————————————————————————————————————
后面,我把位置给修改了:
/data/session
session.save_path = "/data/session"
service php-fpm restart
Gracefully shutting down php-fpm .. done
php -i|grep session.save_path
session.save_path => /data/session => /data/session