背景:ubuntu 17.04不是出了嘛,可是secureCRT没有,于是,得安一个,网上全是x64位的,我这又是32位的,找了好久终于找到一个OK的。
http://www.xue163.com/333/1654/3332691.html
DownLoad: http://download.csdn.net/download/since1988/8287101

请注意,那个下面的这些码贴上只是想让其显示并单项输入,以达到破解的目的:
root@jackX:/home/jackxiang/下载# sudo perl securecrt_linux_crack.pl /usr/bin/SecureCRT
crack successful

License:

  Name:    xiaobo_l
  Company:  www.boll.me
  Serial Number:  03-15-097355
  License Key:  AC81ET 9RKAWY 6WP69G 8EQ1JB ABCM3D K4E85M D3WG57 RGFWT2
  Issue Date:  08-16-2015



====================================================================
jackxiang@jack:~/下载$ ls
scrt-7.3.1-685.ubuntu13.i386.deb  securecrt_linux_crack.pl
jackxiang@jack:~/下载$ sudo dpkg -i scrt-7.3.1-685.ubuntu13.i386.deb
[sudo] jackxiang 的密码:
正在选中未选择的软件包 scrt。
(正在读取数据库 ... 系统当前共安装有 174871 个文件和目录。)
正准备解包 scrt-7.3.1-685.ubuntu13.i386.deb  ...
正在解包 scrt (7.3.1-685) ...
正在设置 scrt (7.3.1-685) ...
正在处理用于 gnome-menus (3.13.3-6ubuntu3) 的触发器 ...
正在处理用于 desktop-file-utils (0.22-1ubuntu5) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3~bzr0+16.04.20160415-0ubuntu1) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.59ubuntu1) 的触发器 ...
jackxiang@jack:~/下载$ which SecureCRT
/usr/bin/SecureCRT
jackxiang@jack:~/下载$ sudo perl securecrt_linux_crack.pl /usr/bin/SecureCRT
crack successful

License:

  Name:    xiaobo_l
  Company:  www.boll.me
  Serial Number:  03-15-097355
  License Key:  AC81ET 9RKAWY 6WP69G 8EQ1JB ABCM3D K4E85M D3WG57 RGFWT2
  Issue Date:  08-16-2015


jackxiang@jack:~/下载$ SecureCRT &
更改yum源为aliyun

[1] 首先备份/etc/yum.repos.d/CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

[2] 进入yum源配置文件所在文件夹

[root@localhost yum.repos.d]# cd /etc/yum.repos.d/

[3] 下载aliyun的yum源配置文件,放入/etc/yum.repos.d/(操作前请做好相应备份)

[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-6.repo

如果下载163的yum源配置文件

[root@localhost yum.repos.d]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

[4] 运行yum makecache生成缓存

[root@localhost yum.repos.d]# yum makecache

[5] 更新系统

[root@localhost yum.repos.d]# yum -y update
背景:我想从一台远程机器上的一个用户上的文件拷贝到我的机器上来,可我不想用root拷贝,想新增加一个用户来拷贝,如何实现无 Permission denied,拷贝过来呢?
现象:权限不够,(如下:test这个目录是我加的一个test用户生成的)
/home/test/rpmbuild/RPMS/x86_64 这个我想scp下面的rpm包,我不是root,怎么样能实现拷贝?
[root@localhost x86_64]# scp rpm@192.168.101.***:/home/test/rpmbuild/RPMS/x86_64/mysql-5.7.12-160420134244.el6.x86_64.rpm /data/www/yum/centos/6/x86_64
rpm@192.168.101.227's password:    Permission denied
问题:test是我建立的一个test用户。假如test用户的密码我忘记了(我用root修改了下test的密码,再用test用户拷贝没有问题,正常),但我有root。
试图:我还是想用rpm这个专有用户来拷贝。
权限:
[root@localhost ~]# ls -l /home/ |grep test
drwx------. 3 test          test          4096 Mar 18 19:18 test
rpm用户进不了这个目录
办法: rpm的用户组改成 test
id test
uid=539(test) gid=539(test) groups=539(test)
xiangjiwu - IEG(33757)  17:11:42
usermod -G test,rpm rpm

rpm的用户组改成 test,实践如下:
[root@localhost x86_64]# id test
uid=539(test) gid=539(test) groups=539(test)
[root@localhost x86_64]# usermod -G test,rpm rpm
[root@localhost x86_64]# id rpm
uid=540(rpm) gid=540(rpm) groups=540(rpm),539(test)
不做下面的权限,也是一样会报权限错误的: Permission denied
chown -R test:rpm /home/test  //给test目录递归上rpm组,下面这一步也不可缺少。
chmod -R 750 /home/test   //用户7,属组5(4+1),读取+执行。
修改后权限如下:
[root@localhost x86_64]# ls -l /home/ |grep test
drwxr-x---. 3 test          rpm           4096 Mar 18 19:18 test

再拷贝,也就成功了:


总结:三个步骤实现,一个不能少,一个是入组,一个是给目录加上组的可读权限:


最后,感谢PHPers@南极里的xiangjiwu - IEG兄弟,Thanks~

斧正:
xiangjiwu - IEG(337**)  17:41:32
rpm用户加到test组了, 那 /home/test就不用改组,直接chmod -R 750 /home/test 就行了。
背景:像unix或linux下的mysql和php-fpm都有一个xxx.sock文件,它是干嘛的呢?可以研究一下它。
  管道由于只能实现具有亲缘进程的进程间通信,使用受到了很大的限制,命名管道解决了这一问题。但是,无论是管道还是命名管道,都只能实现单向通信(在只创建一个管道的情况下)。
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。这里所指的使用套接字实现进程间通信,是由将通信域指定为PF_UNIX来实现的。该函数的形式如下:
int socket(int domain, int type, int protocol);
socket函数中的domain参数用于指定通信域,domain参数取PF_UNIX时,表示创建UNIX域的套接字。使用PF_UNIX域的套接字可以实现同一机器上的不同进程间的通信。
调用bind函数实现了套接字与地址(这里是文件名)的绑定。bind函数的具体信息如下:
int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
其参数my_addr为指向结构体sockaddr_un的指针,该结构体的定义如下:
    #define UNIX_PATH_MAX 108
    struct sockaddr_un {
    sa_family_t     sun_family;     /*PF_UNIX或AF_UNIX */
    char    sun_path[UNIX_PATH_MAX];        /* 路径名 */
    };
在该结构体中,sun_family为AF_UNIX。sun_path是套接字在文件系统中的路径名。
Unix域套接字是通过套接字API实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的IPC机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示Unix域地址的套接字文件能够使用stat()但是不能通过open()打开,而且应该使用套接字API对它进行操作。
Unix域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使Unix域套接字能够比命名管道更好的适应IPC任务。

server.c


send.c


gcc server.c -o server
gcc send.c -o send

[root@iZ25dcp92ckZ sock]# ./server
Bind is ok
有client启动后server响应如下:
Recv: Counter is 1
Recv: Counter is 2
Recv: Counter is 3
Recv: Counter is 4

[root@iZ25dcp92ckZ sock]# ./send
Send: Counter is 1
Send: Counter is 2
Send: Counter is 3
Send: Counter is 4

最后,还发现那个设备文件server.sock 不能直接cat去读取,只能stat:
[root@iZ25dcp92ckZ sock]# cat server.sock
cat: server.sock: 没有那个设备或地址
[root@iZ25dcp92ckZ sock]# stat server.sock    
  文件:"server.sock"
  大小:0               块:0          IO 块:4096   套接字
设备:ca01h/51713d      Inode:16282       硬链接:1
权限:(0755/srwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2016-04-18 14:11:20.878641353 +0800
最近更改:2016-04-18 14:11:20.878641353 +0800
最近改动:2016-04-18 14:11:20.878641353 +0800
创建时间:-
实践摘录自:http://www.cnblogs.com/hnrainll/archive/2011/12/03/2274973.html
在参加腾讯实习生2016面试时,有两道问题自己没有想清楚也思考的不是很明白,面试结束时后悔没有问正解是什么,回来后在搜索引擎上也没有搜到相关的问题。

第一道:"在多线程环境下,有大量并发, 有一个百万次出现一次bug, 如何调试这个bug。"

第二道是面试官给我的试卷上面的。"有一个类指针,指向类实例化的对象,在程序的运行过程中,这个类指针指向的对象崩溃了,这个类指针的虚函数表被破坏了,如何定位这个问题?"

所以,我想问下这两道题目该怎么回答, 谢谢谢谢!!!


知乎网友洋耗子答曰:

因为这些都是假设性问题,所以一般都只能说排查问题的思路:

问题一:

1:其实100万分之一的几率并不算很低。一个繁忙一点的服务,每秒一万个请求是很正常的(如果业务简单,还能更高)。所以百万分之一的复现概率,相当于在压力测试下几分钟就能出一次了。所以在道理上,如果有服务以这个几率出现bug,让它上线本身就是测试部门的失职。

2:反过来说,既然几分钟就能复现,那就在测试环境里压就好了,想怎么改就怎么改,想怎么打log就怎么打log。

3:假定测试环境的压测真的没出来,真的线上出现这样的问题(例如说压测的用例没有覆盖到)。首先考虑的是回滚服务到旧版,以确保正常业务不出问题。然后在线上环境提取某台机,用类似tcpcopy这样的软件导一份数据到测试环境中,来测试这个有问题的版本。这时候,既然是测试环境,你想怎么办都行(不影响线上服务)。

4:到了真正去分析bug了,那首先确定bug的类型。例如说如果能core dump的话相对好办一些,因为可以从core dump大概能看出或者猜出一些东西来。而如果并不core dump,而只是导致数据错乱的话,那就要做数据出入口的校验等。

5:在各顶级模块的入口出口打log,定位发生bug时所在的模块,然后逐步收敛。

6:确定这些模块以及关联影响的模块,单独提取这些模块出来,进行测试或者code review,最终确定问题。

问题二:

1:这类bug,一般都涉及越界操作。

2:一般这类bug,大多数都是可以通过静态code review解决的。既然知道是那个类,盯着用到这些类的实例的地方就行(包括这些类实例的前后几个对象,因为有可能是它们越界)。

3:一些工具,例如valgrind、purify之类的,也有可能有帮助(不一定肯定有用,但一般还是挺有用的)。

朋友!你也别纠结了,因为这两题答不出,拿不到实习不是你的错。
背景:在打php7.0.2下的apcu扩展包时,出现 Installed (but unpackaged) file(s) found,这块是因为它不光生成了.so外,还有一些涉及到.h的头文件在里面,可用于c开发,而我们只运行PHP不做开发,也就没有必要打进去,如果有必要则把它的文件及目录全路径写进%files里去,这儿我们就直接在install里删除掉这个目录下的所有文件及可,两种方法任取一个吧,都有实践且成功生成rpm无错误提示,如下。

方法一,来个保留文件且不报but unpackaged的PHP的igbinary扩展情况(视具体情况是删除还是添加选一个即可):
现象:RPM build errors:
    Installed (but unpackaged) file(s) found:
   /usr/local/php/include/php/ext/igbinary/igbinary.h
添加成功解决办法如下:
%files
%defattr(-,root,root,-)
%{php_extdir}/igbinary.so
# 防止出现:error: Installed (but unpackaged) file(s) found错误。                                                                                            
/usr/local/php/include/php/ext/igbinary/igbinary.h

生成的rpm包里有前面在%files里添加的这个文件,如下:
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145033.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so
/usr/local/php/include/php/ext/igbinary/igbinary.h

假如想删除上面rpm包里的igbinary.so的igbinary.h文件,也就在install里把这个文件删除即可:


再次编译生成的rpm包里也就没有了那个.h文件如下:
[root@localhost SPECS]# rpm -qpl /home/test/rpmbuild/RPMS/x86_64/igbinary-php55-1.2.1-160418145849.el6.x86_64.rpm
/usr/local/php/ext/igbinary.so


方法二,下面是直接删除的解决办法,实践OK(视具体情况是删除还是添加选一个即可):




也就不报错了,也就解决了这个包不放到里面去且不用修改rpmbuild的配置,也不报错了,如下:
Wrote: /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm
rpm -qpl /home/test/rpmbuild/RPMS/x86_64/apcu-php70-5.1.3-160418143835.el6.x86_64.rpm      
/usr/local/php/ext/apcu.so

======================================================================================
编译打包apcu:
rpmbuild -ba php-7.0.5-extension-apcu-5.1.3.spec
出现如下报错提示,扩展代码编译打包出现如下提示:


阅读全文
背景:在网上找一个开要自启动的shell代码放上去后,直接添加服务提示service redis does not support chkconfig,后加上下面两行O了。

加上两行就好了,如下:
[root@localhost SOURCES]# /sbin/chkconfig --add redis
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost SOURCES]# /sbin/chkconfig redis on
[root@localhost SOURCES]# chkconfig --list|grep redis
redis           0:off   1:off   2:on    3:on    4:on    5:on    6:off


阅读全文
因为老是出现好像刚连接时出现行数没有对齐,得ctrl+l一下才能修改到正确的地方,估计是和字体有关系,此次再次实践注意一下:
1)全局设置:Options - Global Options - Terminal - Appearance - Maximumcolumns - 256,并勾选上show horizontal scroll bar。
2)session设置:Options - Session Options - Terminal -Emulation - Logical Columns设置成255,勾选上Retain size and font,Logicalrows设置成42(刚好满屏)、Scrollbackbuffer设置成5000(这样纵向滚动屏就可以缓存更多内容,但占内存),另外Terminal - Appearance - Window -选上Show horizontal scroll bar,然后重新连接。
=============================================================================================

经常会碰到这种问题,在LINUX上使用isql命令加-w 500参数连到SYBASE数据库中做select查询的结果老是显示混乱.很是郁闷,由于我是在SecureCRT连入到LINUX的,在网上也没有找到合适的答案,PUTTY倒是看到有解决的方法.可惜SecureCRT没找到.
   今天无意中发现SecureCRT也有设置的地方,可惜不好传图片,就文字说明一下吧
   设置方法
   当你用SecureCRT建好一个连接后,在这个连接上点右键,再点 Properties (或直接按快捷键 ALT+ENTER) ,这时再点 Emulation 在右边的 Size 下的 Logical 栏中输入列宽的大小,像我的Windows屏幕是 1024*768的, 在这里我输入了500,然后再选中 右边单选项Onresize 中的 Retain size and font ,选好后再点OK,连接到 Linux ,这时屏幕下方会有一个滚动条,呵呵.再用
   isql -w 5000 -Usa -P -SSERVER 连到sybase 查询一条命令试试
  1> sp_helpdb
  2> go
     呵呵.是不是很漂亮了,再也不会混乱了..

来自:http://blog.chinaunix.net/uid-310409-id-2439822.html
阅读全文
༒࿈背༙྇景༙྇:༒࿈这༙྇个༙྇༒࿈还༙྇是༙྇༒࿈0༙྇༒࿈9༙྇༒࿈年༙྇༒࿈开༙྇始༙྇༒࿈兴༙྇起༙྇,༒࿈现༙྇在༙྇༒࿈火༙྇起༙྇来༙྇༒࿈了༙྇。࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒࿈༒

GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器。首先你需要一台client和一台server。client可以是windows系统,利用git bash或者cywin类似的软件来执行指令,也可以是ubuntu等linux系统,server可以是本地搭建的服务器,也可以是云服务器。例如:阿里云服务器,对大学生有很大的优惠,非常划算!(没有任何的利益关系)

1.在本机上安装openssh

在linux client上安装ssh服务,如果是windows的安装git for windows

sudo apt-get install openssh-server

可以查看ssh服务是否开启

ps -e | grep ssh

2.在server上创建一个git用户

sudo adduser git

3.在server上安装git

sudo apt-get install git-core

4.在server上初始化仓库

cd /home/git/

git init --bare myRep.git

5.通过git clone命令进行克隆远程仓库

git clone git@{your server ip}:/home/git/myRep.git

这里都必须知道server上git用户的登入密码。
背景:经常看到PHP的一些扩展均是以tgz后续提供的,那这个包是怎么打出来的呢?
         linux中.tgz是.tar.gz的缩写,我们在解压.tgz文件时可直接使用tar命令来操作。
————————————————————————————————————————
.tgz
解压:tar zxvf FileName.tgz
压缩:未知
.tar.tgz
解压:tar zxvf FileName.tar.tgz
压缩:tar zcvf 搜索FileName.tar.tgz FileName

php-5.5.34/ext










cp zip-1.13.2forphp-5.5.34.spec  zlib-5.5.34forphp-5.5.34.spec
cp zip-1.13.2forphp-5.5.34.spec  openssl-5.5.34forphp-5.5.34.spec  
cp zip-1.13.2forphp-5.5.34.spec  opcache-5.5.34forphp-5.5.34.spec  

挪动一下spec命令更规范:











RPM包重新命名:



spec文件里的Name:    php-5.5.34-extension-apc  替换成:apc-php55-


cat f.txt |awk '{print "sed -i \"s/"$2"/"$3 "/g\" " $1}' 生成如下:


这一行因前面的文件多了一个-出现替换上的问题了:
sed -i "s/php-5.6.20-extension-redis/redis-/g" redis-php56-2.2.4.spec

一个是反查,另一个是在作相关操作时务必备份整个目录,达可以恢复。

http://zhidao.baidu.com/link?url=COVXMPfYvaAj9z3fGsl6rhyYrus4fBGrHUaB4v_xNn34s29kpqtSAyxH2enPxdPhBxzQPkb-82yHXFvwAoDWka
rc?.d中的?代表不同的运行级别,例如进入图形模式的运行级别是5,就是说在rc5.d中的S开头进程都会运行,网络多用户文本模式的运行级别是3,就是运行所有rc3.d中S开头的进程。
单用户模式就是rc1.d,如果是rc0.d就是关机,其中没有S开头的,都是K开头的进程名字,代表杀掉进程。

更多参考:http://blog.itpub.net/12798004/viewspace-1143979/
[调侃苹果]Swift语言是一门仅仅次于PHP这门最好语言,没有这一的老二语言,弥补PHP的不足。当然Swift也确实可以去做Ios开发。。
背景:Swift是静态语言?听说这门子语言linux也默认安装支持啦啊,开源中国要用Swift重写整个网站了。Swift静态语言 + PHP动态语言,绝妙的组合。当然了。Swift性能很强的。
定位:Swift是静态语言,和Rust定位差不多的。系统级语言?胡说,无稽之谈,操作系统层面完全可以替换C,Swift可以直接导入C库,它还很胶水,能打能退,边打边跑,性格倔强。
概论:可以取代C来写一些底层软件,c写程序效率有点慢,不管怎么说,swift只是一门语言,作者的另外一个作品是LLVM,Swift的性能差不多是 C的50%左右,内存模型和C几乎一致。有人问swift 能搞底层吗?!完全可以。
比肩语言:GO语言个人觉得意义不大,标榜自己是系统级语言,实际上是个应用层语言,和PHP来抢市场。之前说 GO是替代C语言的 现在 swift又是替代GO的,swift 跟Go都是偏应用层,swift的作者年轻而go的作者有点老。
极客语言:Golang的语法也确实不是特别友好,比较Geek,Go语言的作者是以前Plan9那帮人搞的,go作者是超级大师级,大师毕竟是少数,人人不可能成大湿。
回归本质:c 是内功, 其他都是招式。C语言最朴实。随便拿个C的开源项目过来,只要你有C的功底都能改改。继续做二次开发。其他的语言,像PHP,Java,Go,C++ 你不花点时间研究下这个项目,完全上不了手。

结论,学不过来了 还是好好 学 PHP把 PHP才是世界最好的语言, PHP就你们这群老家伙在玩 新人也不少,不玩PHP玩什么,能赚钱就行 管他什么语言.


学习PHP之余,学下这门swift吧:
http://letsswift.com/2014/06/basic-operators/
http://letsswift.com/category/swiftguide/language-guide/page/3/
背景:现在流行nginx,于是安装一个监控可能没有必要,但是机器多可能还是有必要装一个agent之类的,这种小工具一般有个三五台服务器可以用用,大型的还得自己搞一套体系才行。

场景

想查看Nginx的实时状态信息,如哪些请求最频繁、哪些IP访问次数多 ……

例如服务器出现带宽持续很高,就需要看下现在哪些请求的流量大

ngxtop

ngxtop就是用来满足这些实时监控需求的,是个非常小巧实用的工具

ngxtop通过分析nginx的访问日志,使用类似top命令的界面实时展示出来

需要注意的是,ngxtop是查看实时状态信息,就是在执行ngxtop命令之后的统计信息,和top一样,不要理解为是对所有日志内容的统计

基本用法

$ ngxtop

结果形式如下

显示大图


实用案例

查看404状态的请求

$ ngxtop top request_path --filter 'status == 404'

查看响应流量最高的请求

$ ngxtop --order-by 'avg(bytes_sent) * count'

查看访问量最大的IP

$ ngxtop --group-by remote_addr

查看状态为4xx或者5xx的请求,同时显示status和http_referer信息

$ ngxtop -i 'status >= 400' print request status http_referer

查看以某字符串开头的请求

ngxtop --filter 'request_path.startswith("/wp")'

参数说明

-l: 指定日志文件的完整路径,默认情况下会读取nginx.conf里指定的访问日志路径

-f: 日志格式

-t : 更新频率,默认2秒

-g: 根据变量 group by,默认变量是 request_path

-o: 根据变量 order by,默认变量是 count

-h: help,详细的命令参数说明和使用方法,可以用这个参数查看帮助

内置变量

可以对以下内置变量进行操作,例如上面案例中的'status >= 400'

bodybytessend

http_referer

httpuseragent

remote_addr

remote_user

request

status

time_local

安装

ngxtop的安装需要依赖库 pip

然后使用pip安装 ngxtop

$ sudo pip install ngxtop
首先让我们来回忆一下历史久远的手动记录日志功能:“文件”——“会话日志”,选择日志文件的存放位置并拟定文件名,点击保存。
自动记录日志功能:
1.       选择“选项”——“全局选项”,打开全局选项,在常规设置中找到“默认会话”设置项,点击右侧的“编辑默认设置”:
英文版下:选择“Options”——“Global Options”,打开全局选项,在常规设置中找到“default session”设置项,点击右侧的“edit default settings”:
2.       上一步骤操作后,打开如下图所示的界面,选择“日志文件”(英文版下选择“Log file”),如下图所示,让我们分别解释一下右侧四个红色方框部分。

http://jingyan.baidu.com/article/335530da88aa0b19cb41c3b9.html
F11相当于windows中的“显示桌面”:
fn + F11 显示桌面。
背景:有时查看目录结构,这个tree非常有用,yum -y install tree安装就能使用。
FreebsD:  Have you tried installing tree with:  pkg install tree ,cd /usr/ports/sysutils/tree make install  
来自:https://www.reddit.com/r/freebsd/comments/4kxyx1/newbie_having_trouble_using_tree_command/

相关参数说明及常用参数说明:
要想目录和文件有颜色,或是用Tree看有颜色,得用那个SecureCRT做下配置:
Session Options->Terminal->Emulation->Terminal [Linux/Xterm] [V]ANSI Color @老武用的是Linux可以,我用的是Xterm也行,颜色可调一下即可。
常常加 -C,表示颜色,-L表示层级。 如:tree -C -L 2。
-C            Turn colorization on always.

阅读全文
背景:自己是https的,想调用别人的一些华东解锁验证码的一些js不是https的,于是被阻止了,怎么办?

    从 Firefox 18 开始,如果 HTTPS 页面中包含非加密的 HTTP 内容,浏览器会在控制台输出警告,记录 Mixed Active Content 请求。而从 Firefox 23 开始,浏览器会默认阻止 HTTPS 页面中可能影响网页安全的 HTTP 请求(即阻止 Mixed Active Content)。这样做会牺牲一些网站的兼容性,但对安全性的提高是很有帮助的。

获取 Mixed Content 相当于发起部分加密的连接,其中未加密的部分存在被中间人攻击的可能。不同类型的 Mixed Content 所产生的危害程度也有所不同,Mixed Passive Content 可能会使中间人获取到用户的设备信息,或让用户看到不正确的图片、音频等信息。而 Mixed Active Content 则可能导致用户的敏感数据被窃取,比如账号密码等。

解决问题

解决方案一 (一劳永逸)

避免在 HTTPS 页面中包含 HTTP 的内容。

解决方案二 (让 Firefox 暂时不阻止)

mixed_content_01

解决方案三 (配置本地 Firefox,让其不再阻止)

打开新标签页,在地址栏输入 about:config,进入配置页面。

mixed_content_02

为什么 Mixed Content Blocker 不是阻止所有的 HTTP 请求?

Mixed Content 可以分为两类:

Mixed Passive Content
Mixed Active Content
Mixed Passive Content (a.k.a. Mixed Display Content)

Mixed Passive Content 是在 HTTPS 页面中一些对安全性影响不大的 HTTP 内容,比如 Image、Audio、Video 等。即使这些内容被中间人篡改,所产生的影响也只是 —— 中间人得知了用户的浏览器信息 (through user-agent included by HTTP headers)、用户看到了一张不正确的图片,这些被篡改的内容无法修改 DOM 树,也无法执行。另外,Mixed Passive Content 在 Web 上普遍存在。因此 Firefox 默认不会阻止 Mixed Passive Content。

Mixed Active Content (a.k.a. Mixed Script Content)

Mixed Active Content 是在 HTTPS 页面中一些能够修改 DOM 树的 HTTP 内容,如 JavaScript、CSS、XMLHttpRequest、iFrame 等。这些 HTTP 内容被中间人修改以后,可能会影响原有 HTTPS 内容的安全性,导致敏感的用户数据被盗。因此 Firefox 会默认阻止 Mixed Active Content。

深入思考

为什么 Frame 应该是 Mixed Active Content?

Frame 之所以不能被分类为 Mixed Passive Content 主要有以下几个原因:
一个 frame 可以将外层可靠的 HTTPS 页面跳转到恶意盗取信息的仿造页面。
如果一个 HTTPS 页面嵌套着 HTTP frame,而这个 frame 包含表单用以输入用户信息,那么用户信息将会以 HTTP 方式传送,有被中间攻击者窃取的危险,而用户却毫不知情,还以为一切都在安全的 HTTPS 里。

如何判定 Mixed Content 是 Active 还是 Passive?

该 Mixed Content 是否会影响页面的 DOM 结构。(Yes -> Active, No -> Passive)

来自:http://www.ipeld.net/archives/8860.html
操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,在 kswapd 中,有2 个阀值, pages_hige和pages_low,当空闲内存页的数量低于 pages_low 的时候, kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high.
通过检查vmstat 的输出结果,发现在那个时间段内,系统的页面换入换成现象很严重。
就是说,问题是内存紧张了,导致了交换分区频繁使用到。kswapd0 进程需要换入换出虚拟内存磁盘空间,导致了系统出现短时间摇摆。
http://mikixiyou.iteye.com/blog/1573976

背景:阿里云的VPS服务器里常常发现有一个Kswapd0的cpu有点高,升级了内核了也很高,于是原来是内存没有释放导致的,https://www.dba-china.com/topic/35:
  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+        COMMAND
   55 root         20   0       0         0        0 D       6.2  0.0            316:54.64  kswapd0


售后工程师 :  您好,linux 系统cpu占用异常请您参考:
https://help.aliyun.com/knowledge_detail/13129846.html  

ECS如果无法远程连接,可以通过ECS的管理控制台中的“更多操作”里的“连接管理终端”连接服务器。使用方面的帮助,您可以参考:https://help.aliyun.com/document_detail/25433.html  


获得当前系统中运行的最占内存的前10个程序:
ps aux | sort -k 6 -rn | head -n10

kswapd进程,就是虚拟内存管理进程,它的存在和占用CPU,即表明实际可用内存很少;而大量的si,so正是说明了这一点.这确实可能与你设置的内存段不合理有及大的关系。一旦使用到虚拟内存,IO读写一定会成为瓶颈。
http://www.linuxidc.com/wap.aspx?nid=64538&p=1&cp=1&cid=0


设置后还是不行,cpu下不来,只能是云盾了,[求助]阿里云ECScpu使用率经常跑满100%:
https://bbs.aliyun.com/read/260014.html?pos=17
1核  内存1G 带宽2m
网站日IP100+   pv1000+     是小站
我用的wp控制面板  开了每30分钟备份一次数据库。
一个月前出现了一次cpu使用率100%的情况,找了淘宝上的大神 花了30元搞定,他的意思是我开的30分钟一次数据库备份的原因,让我关了。        我没有关。
10天前 又出现了一次cpu使用率跑满的情况,我自己登上阿里云主机,把 云盾 全体体检设置里的  深度扫描 和扫描都关了。cpu使用率立马降了下来。事后几天我又把云盾扫描 打开了。
今天凌晨 又出现一次cpu跑满100%的情况,我刚发现,把 云盾 全体体检设置里的  深度扫描 和扫描都关了  重启了服务器,10分钟后 cpu使用率恢复正常,网站正常。(事实上 我不清楚是重启服务器还是关了云盾扫描的原因才让网站恢复正常打开)


大家给个建议,这种情况 是我的配置低吗(如果是  是增加内存还是弄成双核   注意我的网站日ip100+  pv1000+    )
                                        是我开的每30分钟备份一次数据库的原因吗(我的数据库比较重要,我希望高频次备份,如果有不需要高频次备份的方法 请指出)
                                       是阿里云服务器   云盾  体检扫描的原因吗(我怀疑是,但是我是小白,不代表我的怀疑是正确的)
阿里云的大神们啊  请赐高见!!

这里有一个教程,但改版了,这个关闭功能好像给去了,目前找了下但是没有找到:http://xiedexu.cn/aliyun-close-yundun.htm
发现一个新的东西:服务器安全(安骑士)-->实例列表-->安全设置->有一个IP登录白名单和登录地进行修改的,还可以直接关闭安骑士。


实实在在的提个工单:
售后工程师 :  您的问题我们已收到,会尽快为您查看。请您耐心等待,谢谢  
2016-03-16 11:02:48
售后工程师 :  您好,您可以参考以下说明解释:
http://help.aliyun.com/knowledge_detail/7591195.html  
2016-03-16 11:06:23
jac***@aliyun.com : 这个链接也太大而化之了吧,free -m查看明明还剩下很多内存的啊。请工程师给实际勘察下,多谢了。  
2016-03-16 11:26:02
售后工程师 :  我方转给后端专员查看下,请稍等  
2016-03-16 11:28:35
售后工程师 :  您好,您这样试下
在vim /etc/sysctl.conf中添加
vm.min_free_kbytes = 22528
设置的小点然后sysctl -p生成,之后看下cpu使用情况  
设置后重启后,今天好像好了,但不保证后面会不会好。
查了下:
min_free_kbytes  
/proc/sys/vm/min_free_kbytes
该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。
32位系统,设vm.min_free_kbytes时,需注意lowmem的值:
http://blog.sina.com.cn/s/blog_69cc2f0b0100z0la.html
______________________________________________________________________________________________________________________
步骤一:设置分为永久和临时设置:
这个设置才好了,下面给的一个彻底取消swap的设置有问题,导致nginx启动不了,php也有些问题,如下:
(1)永久修改: /etc/sysctl.conf

vm.swappiness = 17
vm.min_free_kbytes = 22528
//vm.swappiness=20  //阿里去vps这个值差不多,但容易crontab的内存不段交换不够,一天后左右死机和它相关。

sysctl -p
.          临时性修改:[root@rhce ~]# sysctl vm.swappiness=10

   (2)文件/proc/sys/vm/drop_caches设
置为1
、2、3,设置
多少直到
kswapd0不占用90%以上CPU,得结合前面步骤里的vm.swappiness=20块调整:
开机启动修改(这个玩法感觉没有太大价值,即使防crontab也一样):
/etc/rc.local
#解决kswapd0长期占cpu但剩余的内存还有很多buffer不正常
echo 1 >/proc/sys/vm/drop_caches        [这个设置有一定效果,前面那个vm.swappiness=20,和10感觉根本没效果。]
/usr/sbin/sysctl  vm.swappiness=10  
————————————————————————————————————————————————————————————————

Nginx:
/usr/local/scripts/autoStartNginxEnterSSLKey.sh
nginx: [alert] mmap(MAP_ANON|MAP_SHARED, 134217728) failed (12: Cannot allocate memory)

[root@iZ25dcp92ckZ ngx_fcgi_cache2]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048572 0       -1

PHP:
[10-Jan-2016 21:35:21 Asia/Shanghai] PHP Fatal error:  Out of memory (allocated 2097152) (tried to allocate 232245 bytes) in /data/htdocs/jackxiang.com/inc/boblog_class_run.php on line 548


重新分配:http://blog.csdn.net/wxqee/article/details/7970110
步骤一:dd if=/dev/zero of=/swapfile bs=2048 count=131072   (257M)
            dd if=/dev/zero of=/swapfile bs=2048 count=196608   (385M)
            dd if=/dev/zero of=/swapfile bs=2048 count=262144   (512M)
            dd if=/dev/zero of=/swapfile bs=2048 count=327680   (641M)
            dd if=/dev/zero of=/swapfile bs=2048 count=589824    (1.2G)
            dd if=/dev/zero of=/swapfile bs=2048 count=720896    (1.4G)

在root提示符下,键入下面的命令,其中count大小等于所要求的块大小:
dd if=/dev/zero of=/swapfile bs=1024 count=65536
记录了1024+0 的读入
记录了1024+0 的写出
1073741824字节(1.1 GB)已复制,21.6104 秒,49.7 MB/秒
步骤二:mkswap /swapfile
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# mkswap swapfile
[root@iZ25dcp92ckZ ~]# mkswap /swapfile
正在设置交换空间版本 1,大小 = 262140 KiB
无标签,UUID=80386ab9-4ce9-4608-8bd6-3315e80a212e
步骤三:swapon /swapfile  立即生效
[root@iZ25dcp92ckZ ngx_fcgi_cache2]# swapon swapfile
[root@iZ25dcp92ckZ ~]# swapon /swapfile
swapon: /swapfile:不安全的权限 0644,建议使用 0600。
[root@iZ25dcp92ckZ ~]# chmod 0600 /swapfile
步骤四:/swapfile    swap    swap    defaults    0 0
在每次开机的时候自动加载swap文件, 需要在 /etc/fstab 文件中增加一行:
/swapfile    swap    swap    defaults    0 0
步骤五:检查是否成功
cat /proc/swaps 或者free命令的输出来查看swap是否已打开。
[root@iZ25dcp92ckZ ~]# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/swapfile                               file            262140  0       -1
步骤六:建立错位置了,先停止swap分区并删除掉
1)先停止swap分区:
swapoff  /swapfile
2)删除掉分区:
rm -Rf /swapfile
3)从fstab里删除掉:
修改/etc/fstab文件,把/swapfile    swap    swap    defaults    0 0 这行删除。这样就能把手动增加的分区删除了。


请使用RHEL/CentOS 6.4及更新版本内核的MySQL同志们注意,vm.swappiness = 0的默认行为修改了,如果继续设置vm.swappiness = 0,有可能导致系统内存溢出,从而导致MySQL被意外kill掉。
扩展swap分区:http://blog.sina.com.cn/s/blog_779eecd8010124ta.html
在ubuntu 里面,swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,对于ubuntu的默认设置,这个值等于60,建议修改为10。具体这样做:
1.查看你的系统里面的swappiness
$ cat /proc/sys/vm/swappiness
不出意外的话,你应该看到是 60
2.修改swappiness值为10
$ sudo sysctl vm.swappiness=10
但是这只是临时性的修改,在你重启系统后会恢复默认的60,所以,还要做一步:
$ gksudo gedit /etc/sysctl.conf
在这个文档的最后加上这样一行:
vm.swappiness=10

来自:http://blog.csdn.net/tianlangxiaoyue/article/details/7249484

http://blog.csdn.net/zhsh87/article/details/8954493

_________________________________________________________________________________________________________

1.kswapd0
Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.
(what is a page?)…Linux uses manages memory in units called pages.
So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk
系统每过一定时间就会唤醒kswapd,看看内存是否紧张,如果不紧张,则睡眠,在kswapd中,有2个阀值,pages_hige和pages_low,当空闲内存页的数量低于pages_low的时候,kswapd进程就会扫描内存并且每次释放出32个free pages,直到free page的数量到达pages_high.


内存16G,但buffer就占了11G之多,cache很少,不仅这样,swap也被占用了一部分,而且总在交换(kswapd0一直占cpu90%以上)。
服务器上只有apache和nfsd服务。用作图片服务器。
buffer占的内存无法回收(用命令:echo 3 >/proc/sys/vm/drop_caches)
Linux下清理内存和Cache方法,Linux下清理内存和Cache方法,修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加,这个设置有问题导致nginx和Php出现问题别千万直接粘贴:

如何让/etc/sysctl.conf修改永久生效:
写入到/etc/sysctl.conf就已经永久生效了,如果要让刚写入的立即也生效可以执行以下sysctl -p.
更多值:http://www.linuxidc.com/Linux/2010-03/24939.htm
阅读全文
Raspberry Pi在FreeBSD下试图编译swoole扩展出现如下问题:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

解决办法:
pkg install autoconf
pkg install m4

重新编译:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # phpize
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ./configure
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # make && make install
/usr/local/include/php/ext/pcre/php_pcre.h:29:10: fatal error: 'pcre.h' file not found

其实这是由于缺少了pcre开发包所导致的,既然缺少那就装上吧:-),我是在Debian环境下当然想通过apt-get这个命令解决问题了,不过搜索了网络,只找到了CentOS的yum命令:
yum update
yum install pcre-devel
好吧,我只有依葫芦画瓢,把yum直接改成apt-get,不过apt-get install pcre-devel这步出错了,找不到包,仔细搜索了网络才知道,原来Debian系下不叫这个名字,正确的命令如下:
apt-get update
apt-get install libpcre3 libpcre3-dev
这样折腾一下,然后再pecl install apc一次,好了,成功安装了!
FreeBSD呢? 试一试:pkg install  pcre-devel  发现没有于是再度下:pkg install libpcre3 libpcre3-dev ,也没有。
看下pcre有没有最新,再看下:
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # pkg install pcre
Updating rpi repository catalogue...
rpi repository is up-to-date.
All repositories are up-to-date.
Checking integrity... done (0 conflicting)
The most recent version of packages are already installed
于是按:mac 10.10.3下安装Swoole扩展,提示pcre.h文件找不到:https://segmentfault.com/q/1010000002886696

正如@韩天峰 所说,你需要pcre扩展库文件,按照swoole的默认安装,程序会在/usr/local以及php include_path里面取搜索,事实上在安装pcre的时候你已经安装了这个库文件。

大概的位置/opt/local/include/pcre.h,所以你需要做一个软链
sudo ln -s /opt/local/include/pcre.h /usr/include/

如果没在这个位置你就搜索一下find / -name pcre,然后软链过去


真正实践OK的办法是:
./configure --with-php-config=/usr/local/bin/php-config  //这样也是不行的。
root@rpi2:/ # find . -name "pcre.h"
./usr/local/include/pcre.h
这行是关键:
ln -s /usr/local/include/pcre.h   /usr/include/pcre.h
就可以编译通过了,并生成了swoole.so,如下:
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/local/lib/php/20131226-zts/
root@rpi2:~/software/swoole-src-swoole-1.8.1-stable # ls /usr/local/lib/php/20131226-zts/
swoole.so


root@rpi2:/usr/local/etc # cp php.ini-development php.ini
extension=swoole.so
root@rpi2:/usr/local/etc # php -m
[PHP Modules]
swoole

试一下程序:

httpServer.php: new file: 17 lines, 451 characters.
root@rpi2:~/php # php httpServer.php
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(3, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(4, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(5, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(6, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(7, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(8, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(9, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].
[2016-02-18 06:46:50 @13407.0]  WARN    swSocket_set_buffer_size(:333): setsockopt(10, SOL_SOCKET, SO_SNDBUF, 8388608) failed. Error: No buffer space available[55].


root@rpi2:~/php # netstat
Active Internet connections
Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4      78      0 localhost.9502         localhost.24050        CLOSE_WAI

root@rpi2:~/php # telnet localhost 9502
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

root@rpi2:~/php # curl "http://127.0.0.1:9502"
出现:
php httpServer.php
[2016-02-18 06:55:17 #13407.0]  WARN    swServer_signal_hanlder: Fatal Error: manager process exit. status=0, signal=0.
[2016-02-18 06:55:23 $13408.0]  WARN    swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11
[2016-02-18 06:55:31 $13408.0]  WARN    swManager_check_exit_status: worker#1 abnormal exit, status=0, signal=11
[2016-02-18 06:55:38 $13408.0]  WARN    swManager_check_exit_status: worker#0 abnormal exit, status=0, signal=11
[2016-02-18 06:55:42 $13408.0]  WARN    swManager_check_exit_status: worker#2 abnormal exit, status=0, signal=11
——————————————缺少安装包来自———————————————————————
运行/usr/local/webserver/php/bin/phpize时出现:
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
根据网上的解决办法是:

# cd /usr/src
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
# cd ../
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install
更简单的办法
# yum install m4
# yum install autoconf

来自:http://blog.csdn.net/21aspnet/article/details/7471574


问题二:swoole error: use of undeclared identifier 'SIOCGIFHWADDR':
http://group.swoole.com/question/106871
替换:https://github.com/swoole/swoole-src/blob/9eaaf1382c7578933dac3fad143033d1bd8c085f/swoole.c

问题三:
https://github.com/swoole/swoole-src/issues/1347
swoole-src-1.9.19/src/network/Port.c:712:41: error: invalid operands to binary expression ('time_t'
      (aka 'long') and 'char *(*)(int, int)')
        if (date_format && mktime(&tm3) - timezone >= file_mtime)
                           ~~~~~~~~~~~~ ^ ~~~~~~~~
1 error generated.
*** Error code 1
修复:https://github.com/swoole/swoole-src/commit/607256a4b3796c1c0ade648379b50fdf815947a5
代码:https://github.com/swoole/swoole-src/blob/607256a4b3796c1c0ade648379b50fdf815947a5/src/network/Port.c

编译成功@11.1-RELEASE FreeBSD 11.1-RELEASE:
creating ./swoole.la
(cd ./.libs && rm -f swoole.la && ln -s ../swoole.la swoole.la)
/bin/sh /tmp/swoole-src-1.9.19/libtool --mode=install cp ./swoole.la /tmp/swoole-src-1.9.19/modules
cp ./.libs/swoole.so /tmp/swoole-src-1.9.19/modules/swoole.so
cp ./.libs/swoole.lai /tmp/swoole-src-1.9.19/modules/swoole.la


php -i | grep extension
extension_dir => /usr/local/php/ext/ => /usr/local/php/ext/
cp -rf /tmp/swoole-src-1.9.19/modules/swoole.so /usr/local/php/ext/
vi /usr/local/etc/php.ini
extension=swoole.so
背景:像webserver啥的开机启动其他程序的shell脚本,链接:https://jackxiang.com/post/7433/ 里写到:  /etc/rc.d/rc.local ,而后做了软连接,/etc/rc.local -> rc.d/rc.local,而这样久后,就以为写在/etc/rc.local就成了,导致开机还真没启动,得注意这个问题。
方法一:
直接建立新文件之后,建立软链接,source文件一定得放在/etc/rc.d里面。
1)vi /etc/rc.d/rc.local
2)ln  软链接,ln [options] source dist, cd /etc ;ln -s  rc.d/rc.local  /etc/rc.local    ==>形成: /etc/rc.local -> rc.d/rc.local  


方法二:
更标准一些,根据开机启动级别是3进行配置(/etc/rc.d/rc3.d 里面去指向/etc/rc.local也行,总之得有一个在/etc/rc.local里自启动才行)
操作如下:

引用:
到后来,有几台服务器突然被重启了,这时候领导问,怎么开机启动的脚本没起作用,还被批了一顿,哎,做事虎头蛇尾,活该!
然后去查,一直没查到原因,
手动执行都是正确的,在排除了权限原因和脚本问题后,很郁闷,怎么放到开机启动项目中就无法执行了呢。
于是去查linux开机启动过程信息。google下,看了下关于一些开机启动启的资料,发现了开机启动程序的级别为3.
果断顺藤莫瓜,找到了这个目录 /etc/rc.d/rc3.d,进去一看恍然大悟。

我的rc.local文件是在 /etc/rc.local中(网上都是说写在这里,我是按照网上来弄的),
而我查看了系统指向rc.local文件的路径是 /etc/rc.d/rc.local,
后来把开机启动的脚本配置到/etc/rc.d/rc.local中(或者把S99local指向 /etc/rc.local也行),重启检查,成功!

总结:主要还是对linux系统不熟悉,这是个漫长的过程,有时间得多看看这方面的书籍。

法二来自:http://www.cnblogs.com/montya/archive/2011/09/09/2172001.html



linux下rc.local中的服务开启失败分析:
linux下可以在rc.local中设置开机启动任务。开机时,系统会根据 /etc/inittab中设置的运行级别,开启/etc/rc.d下相应的服务。如多用户启模式为3,则系统会开启/etc/rc.d/rc3.d/下的服务。

/etc/rc.d/rc3.d/的目录列表:

20140323164552

其中K表示需关闭的服务,S表示开启服务,后面的数据表示关闭或开启的顺序。/etc/rc.d/rc3.d/下的服务一般通过软连接,指向到/etc/init.d中。


S99local一般会通过软链接指到/etc/rc.d/rc.local

ls -al /etc/rc.d/rc3.d/S99local
lrwxrwxrwx. 1 root root 11 Dec 17 2012 /etc/rc.d/rc3.d/S99local ->../rc.local
ls -al /etc/rc.local
lrwxrwxrwx. 1 root root 13 Dec 17 2012 /etc/rc.local -> rc.d/rc.local
ls -al /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 149 Mar 21 13:17 /etc/rc.d/rc.local

如果在rc.local中添加了服务,但开机时未能所开启。则可以通过方排查:
1. 根据运行级别查看rc.local文件链接指是否正确。
2. rc.local文件有没执行限制,导致执行失败,给 chmod +x 给 rc.local添加执行权限。
3. 查看/var/log/boot.log有没报错信息,是不是执行出错了, rc.local中的服务要写 sheel命令的绝对路径, 如Erlang服务,不能直接写 erl,需添加绝对路径/usr/local/bin/erl。
4. 因为rc.local是等待 /etc/init.d的服务都开启后才执行的,所以如果/etc/init.d中的服务未开启完成,rc.local是不会执行的。如启动了firstboot服务,将会导致多用户模式下rc.local不能执行, 可通过 chkconfig –del 把 firstboot服务去除。服务开启时都会写启动日志,可通过/var/log/boot.log查看服务启动与否,再结合/etc/rc.d/rcx.d/下服务启动顺序排查哪些服务阻塞了。可结合 ps awux | grep ServerName 一起排查。

From:http://www.kongqingquan.com/archives/152
分页: 8/23 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]