原因: 插件失效
shell
- 获取日期时间 d=
date '+%Y-%m-%d %H:%M:%S'
- 使用expect实现自动交互功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # expect 示例1 #! /usr/bin/expect expect << EOF spawn python upload.py -y expect "username:" send "myusename\r" expect "password:" send "mypassword\r" expect "New issue subject:" send "issuename\r" expect eof exit
|
1 2 3 4 5 6 7 8 9
| # expect 示例2 spawn python upload.py -y expect { "username:" { send "myusename\r"; exp_continue} "password:" { send "mypassword\r"; exp_continue } "New issue subject:" {send "issuename\n"; exp_continue} "please visit" {exit} }
|
node错误处理
shell脚本 条件判断错误
[shell脚本报错:”[: =: unary operator expected”](http://blog.csdn.net/goodlixueyong/article/details/6564591)
在匹配字符串相等时,我用了类似这样的语句:
1 2 3
| if [ $STATUS == "OK" ]; then echo "OK" fi
|
在运行时出现了 [: =: unary operator expected 的错误,就一直找不到原因,尝试了删除等号两侧的空格和括号里的空格都不管用,最后baidu了一下,才找到原因。把语句改成这样就不会出错了.
1 2 3
| if [[ $STATUS = "OK" ]]; then echo "OK" fi
|
究其原因,是因为如果变量STATUS值为空,那么就成了 [ = “OK”] ,显然 [ 和 “OK” 不相等并且缺少了 [ 符号,所以报了这样的错误。当然不总是出错,如果变量STATUS值不为空,程序就正常了,所以这样的错误还是很隐蔽的。
或者用下面的方法也能避免这种错误:
1 2 3
| if [ "$STATUS"x == "OK"x ]; then echo "OK" fi
|
当然,x也可以是其他字符。顺便提一点,shell中有没有双引号在很多情况下是一致的。
node同一个端口支持http和https(只能作为服务器,不能作为代理)
摘自:http://www.cnblogs.com/dojo-lzz/p/5479870.html
众所周知node是一个高性能的web服务器,使用它可以很简单的创建一个http或https的服务器。
比如一个很简单的http服务器:
1 2 3 4 5 6 7 8 9
| var http = require('http'); var https = require('https'); var httpPort = 3345; var server = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('hello world!'); }).listen(httpPort);
|
https服务器需要生成证书,详情请看这篇文章:HTTPS 的原理和 NodeJS 的实现。这里我们直接看最终成果,附件证书。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var https = require('https'); var fs = require('fs'); var httpsPort = 3346; var options = { key: fs.readFileSync('./cakey.pem'), cert: fs.readFileSync('./cacert.pem') }; var sserver = https.createServer(options, function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('secured hello world'); }).listen(httpsPort);
|
从上文我们可以看出,node生成的每个服务器必须分配一个端口。那么如果我们在工作中遇到一个需求:让同一个端口或地址既支持http协议又支持https协议,这时候我们该怎么办,有的同学很可能想到用nginx做反向代理,这不失为一个解决方案,但这也同样意味着增加了产品的复杂度,用户并不想去折腾ngnix。
办法是有的,原理就要搬出OSI的七层模型:
a8ec8a13632762d04284e772a1ec08fa503dc641
HTTP与HTTPS都属于应用层协议,所以只要我们在底层协议中进行反向代理,就可以解决这个问题! 刚好node可以让我们很方便的创建一个tcp服务器!
所以我们的核心代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| var net = require('net'); var http = require('http'); var https = require('https'); var fs = require('fs'); var httpPort = 3345; var httpsPort = 3346; var server = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('hello world!'); }).listen(httpPort); var options = { key: fs.readFileSync('./cakey.pem'), cert: fs.readFileSync('./cacert.pem') }; var sserver = https.createServer(options, function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('secured hello world'); }).listen(httpsPort); net.createServer(function(socket){ socket.once('data', function(buf){ console.log(buf[0]); // https数据流的第一位是十六进制“16”,转换成十进制就是22 var address = buf[0] === 22 ? httpsPort : httpPort; //创建一个指向https或http服务器的链接 var proxy = net.createConnection(address, function() { proxy.write(buf); //反向代理的过程,tcp接受的数据交给代理链接,代理链接服务器端返回数据交由socket返回给客户端 socket.pipe(proxy).pipe(socket); }); proxy.on('error', function(err) { console.log(err); }); }); socket.on('error', function(err) { console.log(err); }); }).listen(3344);
|