02

Erlang-自定义behaviour

FILED IN Erlang No Comments

-module(my_behaviour).
-export([behaviour_info/1]).
behaviour_info(callbacks) ->
[{handle_1, 5},
{handle_2, 5};

behaviour_info(_Other) ->
undefined.

然后在实现该behaviour的模块里

-module(do_my_behaviour).
-export([handle_1/5, handle_2/5]).
-behaviour(my_behaviour).
handle_1(_, _, _, _, _) -> ok.
handle_2(_, _, _, _, _) -> ok.

同时编译时记得带上 你自己定义的behaviour所在文件夹作为-pa参数,比如 my_behaviour.erl编译后的beam文件放在behaviour目录下,那么
erlc -pa behaviour/ do_mybehaviour.erl

如果不加-pa,会提示Warning: behaviour my_behaviour undefined

25

Erlang SASL – error_logger event handlers

FILED IN Erlang 2 Comments

SASL定义了如下几个error logger event handlers

sasl_report_tty_h

输出supervisor报告、崩溃报告、系统进度情况报告到标准输入输出

sasl_report_file_h

输出supervisor报告、崩溃报告、系统进度情况报告到单独的文件

error_logger_mf_h

输出所有发送到error_logger进程的日志消息到硬盘。在error_logger进程中包含对log_mf_h的调用

25

Erlang SASL – overload

FILED IN Erlang No Comments

overload用来间接的调整系统CPU的使用。当一个application准备启动时,它会先调用 overload:request/0 如果返回 accept 则表示app可以启动,如果返回 reject 则表示拒绝
猛击…还有更多…

25

Erlang SASL – alarm_handler

FILED IN Erlang 2 Comments

2. alarm_handler

alarm handler 进程是一个用gen_event实现的事件处理进程,用来接收系统运行时发出的警告,erlang并不希望通过这个进程来处理所有的警告,相反,erlang鼓励用户实现自己的 alarm handler。在没有指定处理进程的情况下,erlang启动了一个简单的处理进程来处理系统警告。这个简单的处理进程,会将收到的所有警告信息,发送给error logger。这个简单的处理进程被注册为”alarm_handler”,如果你要更换为自己的处理模块,可以这样:

gen_event:swap_handler(alarm_handler, {alarm_handler, swap}, {NewHandler, Args}).

解释:gen_event:swap_handler(alarm_handler, {当前的处理进程名, 退出的原因(会被该gen_event的terminate接受)}, {仅的处理进程名, 新处理进程接受的参数}).

调用这个函数时,erlang将尝试去调用

NewHandler:init({Args,  PreHandlerTerminateReturn).

第二个参数是:上一个处理进程terminate时返回的数据

下面是我写的一个例子,这个例子只适合第一次切换alarm handler,第二次时,init参数应该是 {Args, {ok, terminate_0}}即根据上一次terminate的结果

-module(alarm).
-export([init/1]).
-export([handle_call/2,
handle_info/2,
handle_event/2,
terminate/2,
code_change/3]).

-behaviour(gen_event).

init({Args, {alarm_handler, Alarms}}) ->
io:format("~w ~w ~n", [Args, Alarms]),
{ok, ok}.

handle_call(Info, State) ->
io:format("~w ~n", [Info]),
{ok, State}.

handle_info(Info, State) ->
io:format("~w ~n", [Info]),
{ok, State}.

handle_event(Info, State) ->
io:format("~w ~n", [Info]),
{ok, State}.

terminate(Reason, _State) ->
io:format("terminate:~w ~n", [Reason]),
{ok, terminate_0}.

code_change(_, State, _) ->
{ok, State}.

24

Erlang SASL

FILED IN Erlang 2 Comments

英文全称:System Architecture Support Libraries

中文对照:系统架构支持库

architecture ['ɑ:kitektʃə] 架构

介绍:

erlang sasl 提供下面几个服务(点击各个连接查看详细介绍)

  1. error_logger event handlers
  2. alarm_handler
  3. overload
  4. rb
  5. release_handler
  6. systools

启动sasl的方式是在启动erlang的shell时加上 -boot start_sasl参数,如

erl -boot start_sasl

, ,

20

Erlang远程连接其他节点的shell

FILED IN Erlang No Comments

[root@ming2_local_dev logs]# erl -setcookie 123456 -name 'shell@192.168.1.86'

Erlang R13B04 (erts-5.7.5) [source] [64-bit] [rq:1]
[async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.5  (abort with ^G)
(shell@192.168.1.86)1>
User switch command
--> r 'test@192.168.1.86'
--> j
1  {shell,start,[init]}
2* {'test@192.168.1.86',shell,start,[]}
--> c 2
Eshell V5.7.5  (abort with ^G)
(test@192.168.1.86)1>

解释:

erl -setcookie 123456 -name ’shell@192.168.1.86′

在本地启动一个节点,cookie设置为与你想要连接的远程节点相同, 注意 -name ’shell@192.168.1.86′ 务必别忘了,否则可以连接却无法操作远程shell

启动本地节点后  Ctrl + G

输入 h 查看帮助

输入 r 远程节点名 连接远程节点

连接成功后,输入 j 查看所有连接的节点及它的代号(就是前面的那个数字)

然后  输入 c 远程节点代号,开始操控远程节点

, ,

17

yum出错-Another app is currently holding the yum lock

FILED IN Linux No Comments

原因是升级或安装程序时,你强制断开或关机重启之类的,导致提示yum被锁,把yum.pid删除就行鸟

rm -f /var/run/yum.pid

17

在线翻墙-1

FILED IN 我的品网 No Comments

伟大的XX肯定会采取措施的,不给我们这些墙内的人任何的机会的,有得翻就翻~~~

这个站简单,没啥需要介绍的,实用能用才是王道~~上链接

http://search.cmmb8.com/

cmmb8.com

cmmb8.com

15

linux 配置ssh 通过key登录

FILED IN Linux No Comments

我用的是centos 5  默认下面的配置已经都设置好的了,如果你发现你的linux没有类似这样的配置,那就按照下面的来做啦

1.配置SSH

vi /etc/ssh/sshd_config vi打开SSH的配置文件

Protocol 2 只允许SSH2方式的连接

ServerKeyBits 1024 将ServerKey强度改为1024比特

PermitRootLogin no  不允许用root进行登录

PasswordAuthentication no 不允许密码方式的登录

PermitEmptyPasswords no  禁止空密码进行登录


2.配置公钥和私钥

ssh-keygen -t rsa 中间会要求输入key的密码,输入两次确认即可
猛击…还有更多…

15

vmware-linux自定义IP

FILED IN Linux No Comments

在vm里设置nat或bridged上网,那是很简单的啦,但是想自己定义IP地址呢?(还是很简单的啦,只不过我RP有问题,折腾了半天才搞出来,开始贴图)

1.打开这个选项配置vm的虚拟网卡,就是那些在我们的主机里添加的那几个恶心的虚拟网卡 VMware Virtual Ethernet Adapter for VMnet1 ….

打开vm网络配置

2.找到vmnet8 我是通过nat方式设置成功的,你可以尝试bridged,应该是一个道理

把Subnet IP和 Nat Setting里的Gateway IP(网关IP)设置为同一网段


猛击…还有更多…

TOP