Linux中使用screen管理远程会话

  你是不是经常需要ssh或者telent远程登录到Linux服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。还在用nohup吗?那么来看看screen吧,它会给你一个惊喜!

  元凶:SIGHUP信号

  让我们来看看为什么关掉窗口/断开连接会使得正在运行的程序死掉。

  在Linux/Unix中,有这样几个概念:

  • 进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的ID。
  • 会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期ID为首进程的ID。
  • 会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

  根据POSIX.1定义:

  • 挂断信号(SIGHUP)默认的动作是终止程序。
  • 当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。
  • 如果会话期首进程终止,则该信号发送到该会话期前台进程组。
  • 一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于STOP状态,发送SIGHUP和SIGCONT信号到该进程组中所有进程。

  因此当网络断开或终端窗口关闭后,控制进程收到SIGHUP信号退出,会导致该会话期内其他进程退出。

  我们来看一个例子。打开两个ssh终端窗口,在其中一个运行top命令:

$ top

  在另一个终端窗口,找到top的进程ID为5180,其父进程ID为5128,即登录shell。

$ ps -ef|grep top
root      5180  5128  0 01:03 pts/0    00:00:02 top
root      5857  3672  0 01:12 pts/2    00:00:00 grep top

继续阅读

使用Prey定位丢失的Linux笔记本

  Prey是一款轻量的应用程序,用于追踪并定位你丢失或被盗的笔记本电脑。Prey跨平台,不但开放源代码,而且完全免费。

  Prey通过定时发送一系列报告帮助你确定笔记本的位置,这些报告包括当前系统的状态,正在运行的应用程序及活动网络链接状态,详细的网络状况以及WIFI信息,当前系统桌面截图;如果你的系统内置摄像头,还可以启动摄像头拍照给你。

  Prey使用远程激活系统,这意味着Prey瞧瞧的运行你的笔记本操作系统后台,而当你需要的时候可以远程控制激活它,激活Prey之后它可以收集上述信息并发送给你自己的Prey网络控制面板或直接发送至你的信箱,而偷机贼永远也不会知道他的行为正在被监控。

  你也许会问"如果偷机贼格式化了我的硬盘那Prey还有作用吗?",这个问题问得好。经验告诉我们偷机贼一般会进入你被盗的笔记本中查看是否有有价值的东西,因此你还是有机会抓到贼的。只要你使用Prey,那么当你的笔记本真正被盗之后,你就有那么哪怕一丁点的希望可以找回来,这不就是Prey的意思所在吗?

  Prey使用WIFI热点确定笔记本的位置。再支持GPS的手机中,Prey可以手机自带的GPS功能定位失窃手机的位置,地图的精度是让人吃惊的准确。

  Prey检查笔记本是否有活动的网络链接并发送信息给你,如果没有活动的网络连接,Prey会检查周围是否有开放的WIFI网络,增加追踪到被丢失的笔记本的可能性。

  轻量是Prey的一大特性,它是使用bash写的,因此几乎不存在任何依赖程序,而只是它的那个模块在工作。因此可以说Prey是一个便携软件,并且可以运行在任何操作系统上。

  Prey基于模块化的设计决定你可以添加/删除/配置Prey的各个模块,Prey是基于模块编写的,每个模块分工不同,因此你可以只是用那些你需要的功能。

  Prey内置超强的报告系统,当前电脑正在运行的程序,最近编辑过的文件,当前活动网络连接,系统运行时长,桌面截图甚至通过笔记本摄像头拍下偷机贼的照片。

继续阅读

Ubuntu10.04 Gnome面板出错啦

  在你安装了Ubuntu10.04之后,如果你的Gnome遇到过以下的问题:

  这可能是由于启动Ubuntu或者停止休眠模式时发生的情况(表现为通知栏附近的东东全部乱了套)。

  你可以在终端里输入一条简单的命令重启Gnome面板就把这个问题解决:

$ killall gnome-panel

  下面是正常情况下的截图:

  之前都是注销或者重启能解决问题的,没想到这么轻易就可以搞定。囧''

vim快捷键速查图

  分享一张vim快捷键速查图,贴在公司工位前,事半功倍哦。

  建议大家收藏一张,绝对有用哈!

Ubuntu10.04使用BURG美化启动界面

  BURG是一个基于GRUB2的工程。它使用新的菜单系统,屏幕布局和热键都可以通过配置文件进行灵活的定制。

  Ubuntu10.04的用户可以在/etc/apt/sources.list软件源列表文件的最后添加如下两行:

deb http://ppa.launchpad.net/bean123ch/burg/ubuntu lucid main
deb-src http://ppa.launchpad.net/bean123ch/burg/ubuntu lucid main

  也可以在/etc/apt/sources.list.d/文件下新建一个burg.list的文件,然后把上面两行添加进去,保存文件。

  接下来就是下载签名文件,不然就会出现NO_PUBKEY警告提示(详见《Ubuntu更新源列表时NO_PUBKEY(找不到公钥)问题的解决方法》),虽然这不是错误,但是也不希望每次更新时都出现这个提示。执行命令:

$ gpg --keyserver keyserver.ubuntu.com --recv 55708F1EE06803C5
$ gpg --export --armor 55708F1EE06803C5 | sudo apt-key add -

  然后更新软件源,安装BURG:

$ sudo apt-get update
$ sudo apt-get install burg burg-common burg-emu burg-pc burg-themes burg-themes-common

  安装完成后要把新的启动代码写到MBR:

$ sudo burg-install "(hd0)"

  跟着就是更新BURG的启动列表:

$ sudo update-burg

  你也可以通过burg-emu模拟启动界面,查看当前的效果。

  等有空再把相关的配置修改方面的心得也跟大家分享一下,不过得等上一段时间了撒~~

Python调用smtplib模块实现邮件发送

  Google了一下,实现了一个支持smtp验证的邮件发送函数,二话不说,上代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

#导入smtplib和MIMEText
import smtplib
from email.mime.text import MIMEText

#####################
# 设置服务器,用户名,口令以及邮箱的后缀
mail_host="smtp.xxx.com"
mail_user="Stupig"
mail_pass="xxx"
mail_postfix="xxx.com"

######################
def send_mail(to_list,sub,content):
    me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
    msg = MIMEText(content)
    msg['Subject'] = sub
    msg['From'] = me
    msg['To'] = ";".join(to_list)
    try:
        s = smtplib.SMTP()
        s.connect(mail_host)
        s.login(mail_user,mail_pass)
        s.sendmail(me, to_list, msg.as_string())
        s.close()
        return True
    except Exception, e:
        print str(e)
        return False

if __name__ == '__main__':
    # 要发给谁,这里发给2个人
    mailto_list=["xxxx@xxx.com","xxx@xxxx.cn"]
    # 设置接收列表,主题,正文
    if send_mail(mailto_list,"subject","content"):
        print "发送成功"
    else:
        print "发送失败"

  为了简单起见,就没有对用户名和口令进行编码。

Ubuntu终端ssh连接服务器慢的解决方法

  在Ubuntu下用过putty和终端下的ssh来连接服务器,对比起来,我还是更喜欢用原生态的ssh去管理服务器。但是在Ubuntu里用ssh发现一个很大的问题,那就是在连接服务器的时候要用很久的时间,这是一点让我比较无法忍受的地方(RHEL4不存在这个问题)。通过Google,在Ubuntu官方的文档那里找到了这个bug的解决办法,那就是修改/etc/ssh/ssh_config配置文件:

$ sudo vim /etc/ssh/ssh_config

  把里面的GSSAPIAuthentication值修改为no就可以了:

GSSAPIAuthentication no

  保存退出,现在连接登陆的速度就快了很多!其它的Linux发行版如果存在相同的问题,也可以试一个哈。

一款不错的网站压力测试工具webbench

  webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便。

  1、适用系统:Linux

  2、编译安装:

$ wget http://blog.s135.com/soft/linux/webbench/webbench-1.5.tar.gz
$ tar zxvf webbench-1.5.tar.gz
$ cd webbench-1.5
$ make && make install

  3、使用:

$ webbench -c 500 -t 30 http://127.0.0.1/test.jpg
# 参数说明:-c表示并发数,-t表示时间(秒)

  4、测试结果示例:

Webbench - Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://127.0.0.1/test.jpg
500 clients, running 30 sec.

Speed=3230 pages/min, 11614212 bytes/sec.
Requests: 1615 susceed, 0 failed.

 

几种网站负载均衡技术简介

  DNS轮循

  DNS轮循是指将相同的域名解释到不同的IP,随机使用其中某台主机的技术。但其具有明显的缺点:一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。

  一、F5 BIG-IP

  简介:F5 Networks 公司的著名硬件负载均衡交换机。支持硬件四层、七层交换。不同的型号性能不同,BIG-IP 6400可以支持800万条并发连接,低一点型号的可以支持400万条以上的并发连接。性能极高,但价格也不菲。

  价格:BIG-IP 6400的价格在16万元人民币左右

  网址:http://www.f5.com.cn/ (中国)  http://www.f5.com/ (全球)

  二、LVS(Linux Virtual Server)

  简介:软件四层交换。LVS是在Linux内核中作四层交换,只花128个字节记录一个连接信息,不涉及到文件句柄操作,故没有65535最大文件句柄数的限制。LVS性能很高,可以支持100~400万条并发连接。

  价格:免费、开源

  网址:http://zh.linuxvirtualserver.org/

继续阅读

关于“dc -e xxx”联系方式

  最近浏览博友空间时发现,很多童鞋的联系方式都修改成为"dc -e xxx"的形式,在终端运行一下,才能看到庐山真面目,还真实现了普通童鞋的"非诚勿扰"。

  我也免不了一俗,在对这个神秘的东西进行了一小番研究之后,就写下这篇日志,有需要的就顶一顶哈。

  1、首先,用我的联系方式做为例子:Stupig@foxmail.com,执行以下命令:

$ echo "Stupig@foxmail.com" | xxd -ps -u

  得到:53747570696740666F786D61696C2E636F6D0A

  2、再执行:

$ echo "ibase=16; 53747570696740666F786D61696C2E636F6D0A" | bc

  得到:1861106839103876547709240374441272411159489802,在这串字符串后面加个P就是我博客里面的联系方式啦

$ dc -e 1861106839103876547709240374441272411159489802P
Stupig@foxmail.com

  童鞋们可以试一下撒。