良玉的博客 点点滴滴,积水成河_良玉的博客_页游、手游linux运维工程师之路

redmine二次开发,不同项目不同默认跟踪者

apps/redmine/htdocs/app/views/issues/new.html.erb

<% if @issue.safe_attribute? 'watcher_user_ids' -%>前加入:

<% if @issue.project_id != 2 -%>

    <% @issue.watcher_user_ids = [] %>

      <% if @issue.project_id = 4 -%>

        <% @issue.watcher_user_ids = ['1'] %>

      <% end %>

    <% end %>


重启apache即可


阅读全文...

为flash建立socket安全策略文件服务

前因
Flash被广泛应用于互联网各个方面,是因为它提供了各种各样的特性,其中很重要的一点就是,可以用flash建立TCP连接到服务器然后交换数据。从网络管理员的观点看,一个互联网的服务器能够连接进到内网里来,是一个很恐怖的事情,所以flash搞出来一个安全策略文件。之前用nginx搭建了843端口http://blog.uouo123.com/post/806.html,可能是因为版本兼容问题,perl测试成功,但是产品始终获取不到,则查找是否有其他办法来解决问题。

阅读全文...

标签: nginxflashsocket

作者:良玉 分类:故障处理 浏览:703 评论:0

使用微信推送报警消息及api

三种常见报警介质:

短信:它的好处是不用联网手机有信号就行,但是需要有短信网关,需要花钱

邮件:它也可以做到手机短信通知,基本现在邮箱都有这个功能,当然如果你使用qq邮箱微信也是可以推送邮件提醒的,完全免费

微信:对于我这种手机一响就会掏出来看一下的人比较方便,可定制化强, 完全免费


阅读全文...

ubuntu下的service与/etc/init.d区别

    现在Ubuntu启动,关闭服务不能用/etc/rc*.d/init.d/{Service} {start|stop|restart}了,需要用service {Service} {start|stop|restart}。

    在网上搜索后发现原因是Ubuntu10.04后引入了upstart来管理自启动服务。旧的系统管理被称作SysV,它通过在代表各个run level的目录里建立脚本来控制服务的自动启动。比如,/etc/rc0.d目录里以S开头的脚本会被运行在runlevel 0。

    在这种方式下,如果要屏蔽一个服务,需要把S开头的那个更名为以K开头。而所以在rc*.d下的脚本都链接到/etc/init.d目录里。而Upstart采用了完全不同的方式。它要求所有的启动脚本,其实是配置文件,建立在/etc/init目录下,每个服务一个文件,里面定义脚本启动与关闭的运行级别、条件、事件,等。

    可以看得出,Upstart要比SysV高明得多,因为SysV启动是线性、顺序的,一个S20的服务必须要等待S19启动完成才能启动,如果一个启动要花很多时间,那么后面的服务就算完全无关,也必须要等。

    而在Upstart下,服务的启动基于事件,而且是并行的,只要事件发生,服务可以并发启动。这种方式无疑要优越得多,因为它可以充分利用现在计算机多核的特点,大大减少启动所需的时间。


阅读全文...

RTL8111/RTL8168 Network Connection Fix集成网卡更换驱动

组装机网卡RTL8111/RTL8168 ,装了debian7.8

系统驱动:Kernel driver in use: r8169

流量大的时候经常网卡死掉


网上成功资料:


1) Check to see if the r8169 module is loaded
-> lsmod | grep r816
r8168 41104 0 
-> lspci -v
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
Subsystem: ASRock Incorporation Device 8168
Kernel driver in use: r8169
Kernel modules: r8169


阅读全文...

debian7.8下make报错/lib/modules/3.2.0-4-amd64/build: No such file or directory. Stop.

$ make
make -C /lib/modules/3.2.0-4-amd64/build M=/home/erhannis/Downloads/vhba-module-20130607 modules
make: *** /lib/modules/3.2.0-4-amd64/build: No such file or directory.  Stop.
make: *** [modules] Error 2

解决:

apt-get install linux-headers-$(uname -r)


阅读全文...

nginx配置多个域名,server_names_hash_bucket_size 问题

配置多个 server 虚拟主机,必须要在配置文档中 http { 里头加上 server_names_hash_bucket_size 64; 这么一句

http {

server_names_hash_bucket_size 64;

include mime.types;
default_type application/octet-stream;
………….省略

}

不然不但 nginx 启动不了,而且 nginx -t 测试配置文档的时候会提示

could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
2016/05/20 09:54:27 [emerg] 11372#0: the configuration file /opt/nginx/conf/nginx.conf test failed

  下面是在中文wiki上摘抄的一段说明
  保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.


阅读全文...

解决shell当while read line 遇到exit 只退出循环,不退出脚本

 #!/bin/bash
while read line
do
        if [ "$line" == "do" ];then
                exit 2
        fi
        echo $line
done<<<"$(cat 1)"
echo aaa

<<<是bash的扩展,叫做here-string
加上双引号就能一次读一行结果

阅读全文...

php来实现telnet的连接、传递命令、获取返回值等功能

<?php
error_reporting(-1);
class Telnet {
var $sock = NULL;
 
function telnet($host,$port) {
 $this->sock = fsockopen($host,$port);
 socket_set_timeout($this->sock,1,0);
}
function close() {
 if ($this->sock)  fclose($this->sock);
 $this->sock = NULL;
}
 
function write($buffer) {
 $buffer = str_replace(chr(255),chr(255).chr(255),$buffer);
 fwrite($this->sock,$buffer);
}
function getc() {
 return fgetc($this->sock);
}
function read_till($what) {
 $buf = '';
 while (1) {
  $IAC = chr(255);
   
  $DONT = chr(254);
  $DO = chr(253);
   
  $WONT = chr(252);
  $WILL = chr(251);
   
  $theNULL = chr(0);
 
  $c = $this->getc();
   
  if ($c === false) return $buf;
  if ($c == $theNULL) {
   continue;
  }
 
  if ($c == "1") {
   continue;
  }
  if ($c != $IAC) {
   $buf .= $c;
  
   if ($what == (substr($buf,strlen($buf)-strlen($what)))) {
    return $buf;
   }
   else {
    continue;
   }
  }
  $c = $this->getc();
   
  if ($c == $IAC) {
   $buf .= $c;
  }
  else if (($c == $DO) || ($c == $DONT)) {
   $opt = $this->getc();
    //echo "we wont ".ord($opt)."\n";
   fwrite($this->sock,$IAC.$WONT.$opt);
  }
  elseif (($c == $WILL) || ($c == $WONT)) {
   $opt = $this->getc();
    //echo "we dont ".ord($opt)."\n";
   fwrite($this->sock,$IAC.$DONT.$opt);
  }
  else {
    //echo "where are we? c=".ord($c)."\n";
  }
 }
}
}
$telnet = new telnet("192.168.0.1",'8080');
#echo $telnet->read_till("password: ");
#$telnet->write("KONGXX\r\n");
#echo $telnet->read_till(":> ");
#$telnet->write("ls\r\n");
#echo $telnet->read_till(":> ");
echo $telnet->close();


阅读全文...