SA Blog --系统管理员的博客生涯

书写自己的系统管理博客生涯
posts(330) comments(254) trackbacks(0)
  • IT博客
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类(395)

  • *UNIX系统(148)
  • Cloud(3)
  • Moive
  • Music(1)
  • OpenStack(7)
  • openstack
  • Wiki(1)
  • Windows系统(32)
  • 其他(33)
  • 娱乐
  • 存储相关(22)
  • 存储网络(10)
  • 常用工具下载(25)
  • 数据库应用技术(53)
  • 网络技术(41)
  • 英语
  • 虚拟化(19)

随笔档案(330)

  • 2020年9月 (1)
  • 2020年8月 (1)
  • 2020年7月 (8)
  • 2020年4月 (1)
  • 2020年2月 (1)
  • 2020年1月 (1)
  • 2019年9月 (2)
  • 2019年4月 (1)
  • 2016年1月 (1)
  • 2015年12月 (1)
  • 2015年7月 (4)
  • 2015年5月 (2)
  • 2014年3月 (2)
  • 2014年1月 (1)
  • 2013年12月 (1)
  • 2013年3月 (5)
  • 2013年2月 (4)
  • 2012年12月 (1)
  • 2012年11月 (2)
  • 2012年9月 (2)
  • 2012年8月 (1)
  • 2012年6月 (1)
  • 2012年5月 (1)
  • 2012年1月 (1)
  • 2011年12月 (2)
  • 2011年10月 (1)
  • 2011年9月 (3)
  • 2011年8月 (1)
  • 2011年7月 (5)
  • 2011年6月 (3)
  • 2011年5月 (5)
  • 2011年4月 (2)
  • 2011年3月 (2)
  • 2011年2月 (1)
  • 2011年1月 (5)
  • 2010年12月 (1)
  • 2010年11月 (4)
  • 2010年9月 (13)
  • 2010年8月 (4)
  • 2010年7月 (5)
  • 2010年6月 (5)
  • 2010年5月 (13)
  • 2010年4月 (10)
  • 2010年3月 (5)
  • 2010年2月 (1)
  • 2010年1月 (9)
  • 2009年12月 (5)
  • 2009年11月 (5)
  • 2009年10月 (1)
  • 2009年9月 (3)
  • 2009年8月 (2)
  • 2009年7月 (6)
  • 2009年6月 (3)
  • 2009年5月 (2)
  • 2009年4月 (1)
  • 2009年3月 (2)
  • 2009年2月 (3)
  • 2008年12月 (3)
  • 2008年11月 (1)
  • 2008年10月 (9)
  • 2008年9月 (5)
  • 2008年8月 (3)
  • 2008年7月 (1)
  • 2008年6月 (1)
  • 2008年5月 (2)
  • 2008年4月 (1)
  • 2008年3月 (1)
  • 2008年2月 (3)
  • 2008年1月 (1)
  • 2007年12月 (5)
  • 2007年11月 (1)
  • 2007年10月 (6)
  • 2007年9月 (4)
  • 2007年8月 (4)
  • 2007年7月 (34)
  • 2007年6月 (1)
  • 2007年4月 (2)
  • 2007年3月 (1)
  • 2007年2月 (1)
  • 2006年11月 (1)
  • 2006年9月 (4)
  • 2006年8月 (4)
  • 2006年7月 (1)
  • 2006年6月 (10)
  • 2006年5月 (3)
  • 2006年4月 (14)
  • 2006年2月 (6)
  • 2006年1月 (6)
  • 2005年12月 (12)

收藏夹(5)

  • Other(5)

IT技术

  • MSDN 库(中文)
  • 欢迎使用 MSDN 库(中文),MSDN 库为使用 Microsoft® 工具、产品、技术和服务的开发人员提供必不可少的信息资源。MSDN 库包含操作方法和参考文档、示例代码、技术文章和其他内容。请浏览目录或使用搜索功能来查找所需内容。

健康

  • 体检咨询
  • 北京体检 体检咨询
  • 足医生
  • 足医生

友情链接

  • TestLink中文论坛
  • Testlink 中文论坛
  • 备案专题
  • 备案专题
  • 微软大中华区安全博客
  • 微软大中华区安全博客

存储技术

  • doit存储
  • doit 存储,存储热门论坛
  • ITPUB
  • Oracle DBA 热门中文社区
  • TechTarget IT专家网
  • 蓝德科技

网络技术

  • ChinaUnix 中文社区
  • ChinaUnix 热门中文社区

搜索

  •  

最新评论

  • 1. re: 吐槽一下阿里系软件,就是天天的升级???
  • 评论内容较长,点击标题查看
  • --David
  • 2. re: Symantec Backup exec system recovery 2010(BESR 2010)故障汇总
  • 评论内容较长,点击标题查看
  • --112
  • 3. re: OpenStack安装部署管理中常见问题解决方法(OpenStack-Lite-FAQ)
  • /home/stack/devstack/tools/worlddump.py -d /home/stack/logs
    求救这是什么问题啊。
  • --陈晓龙
  • 4. re: nokia 手机密码忘记后破解
  • nokia 2630,密码不见,恳请帮忙,谢谢
    串号:355219037959407
    lipolipo@gmail.com
  • --沈同学
  • 5. re: chroot 工具 jailkit 限制用户 活动范围 和 权限 _ 笔记
  • 是一个很好的工具嘛。感谢分享。
  • --少林功夫好

阅读排行榜

评论排行榜

re: 吐槽一下阿里系软件,就是天天的升级??? David 2020-09-07 10:54
使用阿里3不碰原则

1.支付宝里面不能点中奖,抽奖,特价
原因:都是假的,快递也有可能是假的,货就更别新了。
如果你中奖100块,买个东西120块,那么这个东西外面肯定卖价11块。

支付宝除了付款,转账,其它功能千万别用。
re: 链接 David 2013-03-20 16:44
http://os.51cto.com/art/201207/347656_1.htm
re: 链接 David 2013-03-20 16:44
http://blog.csdn.net/zoushidexing/article/details/7859800
re: ubuntu开机直接进入命令行模式 David 2012-12-11 14:09
如何设置Ubuntu开机进入命令行?


图形模式下,首先进入终端:
1. 运行 sudo vi/etc/default/grub
2. 找到 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
3.改为 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash text”
4.运行 sudo update-grub
5.reboot
(PS: quiet代表不显示详细启动过程;splash代表显示进度条)
re: S40新机齐上阵 诺基亚C2-06/C2-03将开卖 本月能上市么? David 2011-08-04 18:21
诺基亚发布C2-02、C2-03和C2-06 配全新地图

2011-06-21 13:34:05 已有45人浏览 已有0人评过
关键字:诺基亚 C2-02 C2-03 C2-06 地图
6月21日下午消息,诺基亚于新加坡Nokia Connection 2011大会上正式发布了3款全高性价比手机C2-02、C2-03和C2-06。
诺基亚C2-03是诺基亚在一个月内推出的第三款双卡手机。它具备诺基亚特有的双卡功能,可以识别五张S

6月21日下午消息,诺基亚于新加坡Nokia Connection 2011大会上正式发布了3款全高性价比手机C2-02、C2-03和C2-06。


诺基亚C2-03是诺基亚在一个月内推出的第三款双卡手机。它具备诺基亚特有的双卡功能,可以识别五张SIM卡,用户可以为每个SIM卡设置个性化的标志和名称;而“轻松切换”功能则可以帮助用户不需要关机或取电池就可快速更换SIM卡。诺基亚C2-02是一款具有类似功能配置的单卡手机,拥有实时邮件推送功能,并内置多种即时通讯服务。诺基亚C2-06具有一系列鲜艳色彩和清新、流畅的抛光外形。

C2-02.jpg



三款手机均配有针对S40系列的全新诺基亚地图,预装当地地图和兴趣点。用户可以在离线的情况下浏览地图并规划路线,从而省去通过网络下载地图的成本。


三款手机均配置了采用数据压缩技术的诺基亚浏览器,它能够帮助用户以更低的成本享受更快的网页下载速度,使消费者和运营商都从中获益。诺基亚浏览器配有本地化的启动页面,帮助用户迅速获得本地最相关的内容,并方便地指引用户进入收藏夹和历史记录。

c2-03.jpg


此外,三款手机均内置了立体声调频收音机和媒体播放器,并支持诺基亚生活通服务。存储卡可扩展至32GB。

C2-06.jpg


诺基亚C2-02与诺基亚C2-03的零售价预计约为75欧元(695人民币),C2-06零售价预计约为80欧元(741人民币)。三款手机预计在2011年第三季度上市
re: 问:为什么我的域名备案号被注销了 David 2011-03-25 13:45
  近日,有不少站长反映,ICP备案号码被取消了,这令站长们忧心忡忡,很痛苦,也很无助。遇到这样的事情,谁也没有办法,但问题是要搞清楚自己的备案信息为何会被取消,哪里出了问题,哪个环节疏忽了,找到后加以改之,以免以后再出现类似问题。可现在的问题是,备案号码取消就关系着网站要被关闭和停业的命运,这个打击对站长来说是相当大的,今日发一个工信部关于ICP备案被取消的通知:

  尊敬的用户(***):您备案信息中填写的接入商(广州市靖康计算机科技有限公司)经核实,认为你备案的网站非其接入,已经取消了相关接入,目前您主体下备案网站(网站名称:*********,域名:******等)已不存在任何接入信息,具体情况您可再向接入商进行确认。

  出现这样的情况,真是让人很痛苦,备案号码被取消了,接入商没有信息了,等于说你这个域名好象从未备案过一样,无任何记录了。如果想挽回,必须要重新备案。但惊奇的是,我们提交信息的时候却发现,没有任何重复信息和数据,但这个信息以前提交备案时曾经用过的,现在居然还可以提交。真不知工信部网站备案系统是什么样子的,有些可以,有些就不行。难道,这就是传说中的漏洞吗?

  不晓得如何解释,但这的确令人不爽,备案号码都没了,一切还要重头再来,这样折腾下去,会被工信部折腾的不得安宁。看了下备案信息,没有发现什么漏洞和不对的地方,但就是在网站备案查询那里查不到任何备案信息,这真是太奇怪了。也太不给面子了,现在备案如此艰辛困难重重,真是很不容易,期望我这次备案通过后不会被取消号码!
re: 新手学LVM扩容-----给虚拟机添加空间 David 2011-01-14 15:25
http://www.howtoforge.com/linux_resizing_ext3_partitions
re: vi 常用技巧 [未登录] david 2010-11-30 20:36
http://ldqhx.cn.alibaba.com/
re: #Linux NFS服务 固定端口及防火墙配置# David 2010-09-07 12:12
#portmap
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p tcp --dport 111 -j ACCEPT
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p udp --dport 111 -j ACCEPT
#nfsd
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p tcp --dport 2049 -j ACCEPT
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p udp --dport 2049 -j ACCEPT
#mountd
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p tcp --dport 1011 -j ACCEPT
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p udp --dport 1011 -j ACCEPT
#rquotad
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p tcp --dport 1012 -j ACCEPT
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p udp --dport 1012 -j ACCEPT
#rpc.statd
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p tcp --dport 32768 -j ACCEPT
/sbin/iptables -A INPUT -s 172.19.1.0/24 -p udp --dport 32768 -j ACCEPT
re: VMware VirtualCenter服务开机不能自动启动问题解决 David 2010-06-17 10:54
Vmware VirtualCenter Server 服务无法自动启动


症状:

每次重新启动机器后,Vmware VirtualCenter Server服务都无法自动启动。
服务的启动类型是设为自动的,日志里有如下报错信息
“Vmware VirtualCenter Server服务因2(0x2)服务性错误而停止。”
每次都需要手动启动一下,就OK了





查看vCenter Serve启动日志:
Section for VMware VirtualCenter, pid=3460, version=4.0.0, build=build-162856, option=Release
[2009-10-27 15:15:31.406 03472 info 'App'] Current working directory: C:\WINDOWS\system32
[2009-10-27 15:15:31.406 03472 info 'Libs'] HOSTINFO: Seeing Intel CPU, numCoresPerCPU 1 numThreadsPerCore 2.
[2009-10-27 15:15:31.406 03472 info 'Libs'] HOSTINFO: This machine has 2 physical CPUS, 2 total cores, and 4 logical CPUs.
[2009-10-27 15:15:31.406 03472 info 'App'] Log path: C:\Documents and Settings\All Users\Application Data\VMware\VMware VirtualCenter\Logs
[2009-10-27 15:15:31.406 03472 info 'App'] Initializing SSL
[2009-10-27 15:15:31.406 03472 info 'Libs'] Using system libcrypto, version 9080AF
[2009-10-27 15:15:32.515 03472 info 'App'] Vmacore::InitSSL: doVersionCheck = true, handshakeTimeoutUs = 120000000
[2009-10-27 15:15:32.515 03472 info 'App'] Starting VMware VirtualCenter 4.0.0 build-162856
[2009-10-27 15:15:32.515 03472 info 'App'] Log directory: C:\Documents and Settings\Default User\Local Settings\Application Data\VMware\vpx.
[2009-10-27 15:15:32.515 03472 info 'App'] Account name: SYSTEM
[2009-10-27 15:15:32.515 03472 info 'App'] Total virtual memory available for the process 2097024 KB
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxOsLayer] Enabled low-frag process heap.
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxOsLayer] Enabled low-frag crt heap.
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:749] Calling: InfoDeclSchema(gDB)
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:751] Calling: VpxCallbackDesc::Init(MakeFunctor(this, &ServerApp::RequestShutdown))
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:752] Calling: VpxCryptInit()
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:753] Calling: VpxLRO::Init()
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:754] Calling: VpxLroList::Init(ltud)
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxLRO] 128 max LROs
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxLRO] 12 reserved internal LROs
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxLRO] 12 reserved blocker LROs
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxLRO] 12 reserved short LROs
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxLRO] 8 reserved long LROs
[2009-10-27 15:15:32.515 03472 info 'App'] [VpxLRO] 600-second task lifetime
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:755] Calling: VpxdCharacterizeThreadpool(ltud, minNumThreads, maxNumThreads)
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:756] Calling: VpxdCertificate_Load(gDB, CERTIFICATE_VMDBPATH )
[2009-10-27 15:15:32.515 03472 info 'App'] [Vpxd::ServerApp::Init:757] Calling: VpxdVdb::Init(Vdb::GetInstance(), false, false)
[2009-10-27 15:15:32.593 03472 error 'App'] ODBC error: (28000) - [Microsoft][SQL Native Client][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
[2009-10-27 15:15:32.593 03472 error 'App'] Error getting configuration info from the database[2009-10-27 15:15:32.593 03472 error 'App'] [Vpxd::ServerApp::Init] Init failed: VpxdVdb::Init(Vdb::GetInstance(), false, false)
[2009-10-27 15:15:32.593 03472 error 'App'] Failed to intialize VMware VirtualCenter. Shutting down...
[2009-10-27 15:15:32.593 03472 info 'App'] Forcing shutdown of VMware VirtualCenter now





遇到过这种问题, 原因是 VC服务启动的速度快过SQL服务启动的速度,
造成VC启动时时找不到数据库,所以提示错误,当SQL服务启动完成,再重启
一次VC服务,VC服务恢复正常。。。
可以尝试一下设置来解决问题:
1 先在服务中找到负责VC的SQL服务的准确名称,一般是MSSQLXXX or MSSQL$SQLEXPRESSXXX
2 打开注册表 HKLM\System\CurrentControlSet\Services\vpxd,打开DependOnService值,
添加 VC数据库服务的准确名称,例如: MSSQL$SQLEXPRESSXXX (添加后最后一行要留一个空白行)
3 保存,重启服务器.
re: VMware VirtualCenter服务开机不能自动启动问题解决 David 2010-06-17 10:30
貌似这么做了之后,N天后又不可以了。
re: ssh 关闭后仍保持当前运行的进程 David 2010-06-14 22:26
Linux Jobs等前后台运行命令解

A,Shell支持作用控制,有以下命令:
1. command& 让进程在后台运行
2. jobs 查看后台运行的进程
3. fg %n 让后台运行的进程n到前台来
4. bg %n 让进程n到后台去;
PS:"n"为jobs查看到的进程编号.

B.下列转:http://blog.chinaunix.net/u/1604 /showart_1079559.html

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。 bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

#Linux下使用Shell命令控制任务 Jobs执行
下列命令可以用来操纵进程任务:
  ps 列出系统中正在运行的进程;
  kill 发送信号给一个或多个进程(经常用来杀死一个进程);
  jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为 Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;
  bg 将进程搬到后台运行(Background);
  fg 将进程搬到前台运行(Foreground);

  将job 转移到后台运行
  如果你经常在X图形下工作,你可能有这样的经历:通过终端命令运行一个GUI程序,GUI界面出来了,但是你的终端还停留在原地,你不能在shell中继续执行其他命令了,除非将GUI程序关掉。

  为了使程序执行后终端还能继续接受命令,你可以将进程移到后台运行,使用如下命令运行程序: #假设要运行xmms

  $xmms &

  这样打开xmms后,终端的提示又回来了。现在xmms在后台运行着呢;但万一你运行程序时忘记使用“&”了,又不想重新执行;你可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。

  概念:当前任务

  如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码 “[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg” 和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。

  察看jobs
  使用jobs或ps命令可以察看正在执行的jobs。

  jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;

  进程的挂起

  后台进程的挂起:

  在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;

  在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;

  当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;

  前台进程的挂起:

  ctrl+Z;

  进程的终止

  后台进程的终止:
  方法一:
  通过jobs命令查看job号(假设为num),然后执行kill %num

  方法二:
  通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

  前台进程的终止:

  ctrl+c

   kill的其他作用
  kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。

  SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。
===================
Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
 但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:
nohup /root/start.sh &
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。
咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。
在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。
这个细节有人和我一样没注意到,所以在这儿记录一下了。

附:nohup命令参考
nohup 命令
  用途:不挂断地运行命令。
  语法:nohup Command [ Arg ... ] [ & ]
  描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示"and"的符号)到命令的尾部。
  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
  退出状态:该命令返回下列出口值:
  126 可以查找但不能调用 Command 参数指定的命令。
  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
  nohup命令及其输出文件
  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用 nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
  该命令的一般形式为:nohup command &
  使用nohup命令提交作业
  如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为 nohup.out的文件中,除非另外指定了输出文件:
  nohup command > myout.file 2>&1 &
  在上面的例子中,输出被重定向到myout.file文件中。
  使用 jobs 查看任务。
  使用 fg %n 关闭。
  另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。
简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止。
  要实现守护进程,一种方法是按守护进程的规则去编程(本站有文章介绍过),比较麻烦;另一种方法是仍然用普通方法编程,然后用nohup命令启动程序:
  nohup<程序名>&
  则控制台logout后,进程仍然继续运行,起到守护进程的作用(虽然它不是严格意义上的守护进程)。
  使用nohup命令后,原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了 log的作用,实现了完整的守护进程功能。
  ygwu @ 2005年04月18日 上午10:03
  For example:
  如何远程启动WebLogic服务?
  用telnet远程控制服务器,远程启动WEBLOGIC服务,启动后关闭 telnet,WebLogic服务也跟着停止,这是因为使用telnet启动的进程会随着telnet进程的关闭而关闭。所以我们可以使用一些UNIX 下的命令来做到不关闭。
  使用如下命令:
  nohup startWeblogic.sh&
  如果想要监控标准输出可以使用:
  tail -f nohup.out
  当在后台运行了程序的时候,可以用jobs命令来查看后台作业的状态。在有多个后台程序时,要使用来参数的fg命令将不同序号的后台作业切换到前台上运行。
  当用户启动一个进程的时候,这个进程是运行在前台,使用与相应控制终端相联系的标准输入、输出进行输入和输出。即使将进程的输入输出重定向,并将进程放在后台执行,进程仍然和当前终端设备有关系。正因为如此,在当前的登录会话结束时,控制终端设备将和登录进程相脱离,那么系统就向所有与这个终端相联系的进程发送SIGHUP的信号,通知进程线路已经挂起了,如果程序没有接管这个信号的处理,那么缺省的反应是进程结束。因此普通的程序并不能真正脱离登录会话而运行进程,为了使得在系统登录后还可以正常执行,只有使用命令nohup来启动相应程序。
  使用命令nohup当然可以启动这样的程序,但nohup启动的程序在进程执行完毕就退出,而常见的一些服务进程通常永久的运行在后台,不向屏幕输出结果。在Unix中这些永久的后台进程称为守护进程(daemon)。守护进程通常从系统启动时自动开始执行,系统关闭时才停止。
  在守护进程中,最重要的一个是超级守护进程inetd,这个进程接管了大部分网络服务,但并不是对每个服务都自己进行处理,而是依据连接请求,启动不同的服务程序与客户机打交道。inetd支持网络服务种类在它的设置文件/etc/inet.conf中定义。inet.conf文件中的每一行就对应一个端口地址,当inetd接受到连接这个端口的连接请求时,就启动相应的进程进行处理。使用inetd的好处是系统不必启动很多守护进程,从而节约了系统资源,然而使用inetd启动守护进程相应反应会迟缓一些,不适合用于被密集访问的服务进程
re: ssh 关闭后仍保持当前运行的进程 David 2010-06-14 22:10

当SecureCRT异常关闭后,后台进程一同关闭的现象罪魁祸首 Signup信号
作者: 2hei 发表于2009年5月19日 22:24 版权声明: 可以转载, 转载时务必以超链形式标明文章原始出处和作者信息及版权声明 http://www.2hei.net/mt/2009/05/securecrt-closed-and-sighup.html

症状:使用SecureCRT工具ssh远程连接linux,不退出ssh,而是强行关闭终端(合上笔记本走人)情况下,后台启动的应用也会关闭。
后果:男人哭吧哭吧不是罪!

测试案例:
很明显的是关闭终端后,前台运行的程序会被随之关闭,但是后台进程也会因为终端异常关闭而关掉,如下是一个简单的测试结果:
1、后台执行程序,正常关闭ssh连接,关闭终端的情况:
开启两个终端,其中第一个在后台执行ping操作
ping google.com | tee log.txt &

在第二个终端观察
tail -f log.txt 可以看到日志一直在写
使用pstree命令可以看到ping的进程存在
|-sshd-+-sshd---sshd---bash---pstree
| `-sshd---sshd---bash-+-ping
| `-tee

Ctrl+D 退出第一个终端 然后关闭终端

第二个终端的日志仍然在写,pstree命令:
|-ping
ps x
29427 ? S 0:00 ping google.com
看到ping的进程依然存在

2、后台执行程序,非正常关闭ssh连接(模拟突然掉电或者,未来得及退出ssh,或者ssh仍然连接,直接关闭终端SecureCRT)情况:
同样开启两个终端,其中第一个在后台执行ping操作
ping google.com | tee log.txt &

在第二个终端观察
tail -f log.txt 可以看到日志一直在写
使用pstree命令可以看到ping的进程存在
|-sshd-+-sshd---sshd---bash---pstree
| `-sshd---sshd---bash-+-ping
| `-tee

在不退出ssh的情况下,强行关闭第一个终端(SecureCRT)
在第二个终端观察
tail -f log.txt 可以看到日志已经停止写。
使用pstree命令可以看到ping的进程被停掉
ps aux看不到ping的进程,说明强行关闭终端的情况下后台进程也别kill掉了


查了一下资料,这其中起关键的是 SIGHUP信号
查看所有的信号:
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX

列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

SIGHUP信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。
当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止。
不过有的程序可以捕获这个信号,并忽略它,这样就算退出了Linux登录,后台程序依旧运行。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。

以下是网络的相关资料
http://hi.baidu.com/xingfengsoft/blog/item/fedbd05c4d8c7e45faf2c0c8.html
—— secureCRT异常退出和执行exit的区别?
如果直接关闭secureCRT(此处假设是使用ssh登录终端的),那么对于被登录的系统来说,就是远端程序异常断连。和我们突然断网掉线是一样的效果。
这种情况下,用户并没有信号发送,而是sshd服务检测到对端响应超时,然后向之前建立起的连接以及该连接下(ssh登录后会分配一个bash给用户)的进程发送结束信号。如果部分进程忽略sshd发送的信号,进程不退出,在分配给用户的bash退出后,该进程将被init进程接管。

终端异常退出后,后台进程不关闭的解决办法:
1、使用nohup命令: nohup <command> [argument…] & nohup可以屏蔽SIGHUP信号!
2、使用 screen命令。

简单介绍如下:
SCREEN vi /tmp/2hei.net

需要中断连接:
screen Ctrl+a d

查询screen进程:
ps x
20377 ? Ss 0:00 SCREEN vi /tmp/2hei.net

重连 screen -r 20377

参考资料:
http://www.ibm.com/developerworks/cn/linux/l-cn-screen
re: linux给一个普通用户reboot权限 David 2010-06-13 18:15
同样可以将其他命令如shutdown halt 授权给指定用户使用
re: Linux/Windows下的文件加密 GnuPG[未登录] david 2010-05-31 15:42


1. 生成和查看密钥

gpg --gen-key

查看生成的公钥

gpg --list-keys

查看、建立的私钥

gpg --list-secret-keys

2 加密解密文件

用公钥加密
gpg -ea -r xli@redhat.com /directory/filename

用私钥解密

gpg -d /directory/filename.asc > /directory/filename

3. 导出和导入公钥

gpg --export "xli@redhat.com" -o leonli_publickey.asc (-a 输出ascii格式)

gpg --import leonli_publickey.asc

导入他人公钥以后,一般需要用自己的私钥对导入的他人公钥进行签名,(使用 --sign-key 选项进行签名,签名的目的是证明您完全信任这个公钥的合法性。 ):

gpg --sign-key brian@worldcontrol.com

对公钥签名以后,可以使用下面命令来对公钥环中的公钥的签名进行检查:

gpg --check-sig

导入对方的公钥以后,就可以用对方的公钥来加密文件:

gpg -ea -r xli@redhat.com /directory/filename

4. 查看公钥指纹信息:

gpg --fingerprint xli@redhat.com

得到指纹以后,通过其他途径与公钥所有人确认(电话等)

5 发送公钥到互联网网站

gpg --keyserver subkeys.pgp.net --send-keys xli@redhat.com

发送到互联网网站以后,可以从服务器上查找(查找到以后,命令会提示是否要下载):

gpg --keyserver subkeys.pgp.net --search-keys xli@redhat.com

也可以直接从服务器上下载

gpg --recv-keys brian@worldcontrol.com

6 修改密钥
gpg --edit-key "Leon Li"

7 备份密钥
备份公钥:

gpg -o keyfilename --export KeyID
如果没有KeyID则是备份所有的公钥,-o表示输出到文件 keyfilename中,如果加上-a的参数则输出文本格式的信息,否则输出的是二进制格式信息。

备份私钥:

gpg -o keyfilename --export-secret-keys KeyID

如果没有KeyID则是备份所有的私钥,-o表示输出到文件keyfilename中,如果加上-a的参数则输出文本格式的信息,否则输出的是二进制格式信息。

在别的机器上可以通过

gpg --import filename

导入这些信息。

8 签名

进行签名:
gpg --output doc.sig --sign doc
签名以后得到的内容是二进制(在签名以前对源文件进行压缩,然后签名),签名得到的结果同时也就是被加密了的

给定一个签名的文档,你或者可以检查签名,或者可以检查签名并恢复原始文档。要检查签名使用 --verify 选项。要验证签名并提取文档使用 --decrypt选项。 输入要验证并恢复的签名文档,就可以输出恢复后的文档。
gpg --verify doc.sig
gpg --output doc --decrypt doc.sig

明文签名(clearsigned)文档

数字签名的一个普遍用途就是对usenet的帖子或是email消息进行签名。在这种情况下我们对文档进行签名但不希望压缩文档。选项 --clearsign 让文档封装在一个ASCII铠甲式的签名中,但并不改动文档。

alice% gpg --clearsign doc

分离签名

签名后的文档只有有限的用途。其他用户必须从签名版本中恢复原始文档,即使在明文签名文档中,签名后的文档必须编辑以恢复原始模样。因此,有第三种方法对文档进行签名,该方法创建一个可分离的签名,该签名是一个单独的文件。一个分离签名使用 --detach-sig选项来创建。

alice% gpg --output doc.sig --detach-sig doc

You need a passphrase to unlock the secret key for
user: "Alice (Judge) "
1024-bit DSA key, ID BB7576AC, created 1999-06-04

Enter passphrase:

要验证签名必须同时使用文档和分离签名。选项--verify可以用来检查签名。

blake% gpg --verify doc.sig doc
gpg: Signature made Fri Jun 4 12:38:46 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Alice (Judge) "
re: Lenovo 的CPP code更改,familyandfriends 失效 David 2010-03-24 10:26
现在没有thinkpad的了,不过Dell 新出一个EPP,有兴趣的可以到那里买,稍稍便宜一些,比thinkpad之前的差距还是很多。

http://www.lenovo.com/epp
re: 国内速度比较快的Gentoo镜像 David 2010-03-17 14:27
记下两个开源的国内镜像(163和sohu)。

http://mirrors.163.com/
http://mirrors.sohu.com/
re: linux 下访问windows共享 David 2010-03-09 14:35
mount –t cifs –o username=geek,password=thepass //geekmini/root /media/Video
re: linux 下如何读取 使用 iso 镜像文件. David 2010-03-09 14:35
mount –t cifs –o username=geek,password=thepass //geekmini/root /media/Video
re: SubVersion定期完整备份脚本(Linux) David 2010-01-29 17:42
SVN备份策略
文章摘要:Subversion适合于规模一般(几十开发人员)的项目代码的版本管理工作。使用体验较VSS、CVS等好,推荐在选择版本管理工具时可以试用一下。
安装Subversion
1 安装svn-1.4.0-setup。
2 将SVN配置成服务。

(本文例子基于FreeBSD/Linux实现,windows环境请自己做出相应修改)
配置管理的一个重要使命是保证数据的安全性,防止服务器应硬盘损坏、误操作造成数据无法恢复的灾难性后果。因此制定一个完整的备份策略非常重要。

一般来说,备份策略应规定如下几部分内容:备份频度、备份方式、备份存放地点、备份责任人、灾难恢复检查措施及规定。

备份频度、存放地点等内容可以根据自己的实际情况自行制定;本文重点描述备份方式。

svn备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync.

注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。
笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。

优缺点分析:
==============
第一种svnadmin dump是官方推荐的备份方式,优点是比较灵活,可以全量备份也可以增量备份,并提供了版本恢复机制。
缺点是:如果版本比较大,如版本数增长到数万、数十万,那么dump的过程将非常慢;备份耗时,恢复更耗时;不利于快速进行灾难恢复。
个人建议在版本数比较小的情况下使用这种备份方式。
第二种svnadmin hotcopy原设计目的估计不是用来备份的,只能进行全量拷贝,不能进行增量备份;
优点是:备份过程较快,灾难恢复也很快;如果备份机上已经搭建了svn服务,甚至不需要恢复,只需要进行简单配置即可切换到备份库上工作。
缺点是:比较耗费硬盘,需要有较大的硬盘支持(俺的备份机有1TB空间,呵呵)。
第三种svnsync实际上是制作2个镜像库,当一个坏了的时候,可以迅速切换到另一个。不过,必须svn1.4版本以上才支持这个功能。
优点是:当制作成2个镜像库的时候起到双机实时备份的作用;
缺点是:当作为2个镜像库使用时,没办法做到“想完全抛弃今天的修改恢复到昨晚的样子”;而当作为普通备份机制每日备份时,操作又较前2种方法麻烦。


下面具体描述这三种的备份的方法:
===============

1、svnadmin dump备份工具
------------------------
这是subversion官方推荐的备份方式。

1)定义备份策略:
备份频度:每周六进行一次全量备份,每周日到周五进行增量备份
备份地点:备份存储路径到/home/backup/svn/
备份命名:全量备份文件名为:weekly_fully_backup.yymmdd,增量备份文件命名为:daily-incremental-backup.yymmdd
备份时间:每晚21点开始
备份检查:每月末进行svnadmin load恢复试验。
2)建立全量备份脚本:
在~/下建立一个perl脚本文件,名为weekly_backup.pl,执行全量备份,并压缩备份文件,代码如下(本代码只针对一个库的备份,如果是多个库请做相应改动):

#!/usr/bin/perl -w
my $svn_repos="/home/svn/repos/project1";
my $backup_dir="/home/backup/svn/";
my $next_backup_file = "weekly_fully_backup.".`date +%Y%m%d`;

$youngest=`svnlook youngest $svn_repos`;
chomp $youngest;

print "Backing up to revision $youngestn";
my $svnadmin_cmd="svnadmin dump --revision $youngest $svn_repos >$backup_dir/$next_backup_file";
`$svnadmin_cmd`;
open(LOG,">$backup_dir/last_backed_up"); #记录备份的版本号
print LOG $youngest;
close LOG;
#如果想节约空间,则再执行下面的压缩脚本
print "Compressing dump file...n";
print `gzip -9 $backup_dir/$next_backup_file`;

3)建立增量备份脚本:
在全量备份的基础上,进行增量备份:在~/下建立一个perl脚本文件,名为:daily_backup.pl,代码如下:

#!/usr/bin/perl -w
my $svn_repos="/home/svn/repos/project1";
my $backup_dir="/home/backup/svn/";
my $next_backup_file = "daily_incremental_backup.".`date +%Y%m%d`;

open(IN,"$backup_dir/last_backed_up");
$previous_youngest = <IN>;
chomp $previous_youngest;
close IN;

$youngest=`svnlook youngest $svn_repos`;
chomp $youngest;
if ($youngest eq $previous_youngest)
{
print "No new revisions to backup.n";
exit 0;
}
my $first_rev = $previous_youngest + 1;
print "Backing up revisions $youngest ...n";
my $svnadmin_cmd = "svnadmin dump --incremental --revision $first_rev $youngest $svn_repos > $backup_dir/$next_backup_file";
`$svnadmin_cmd`;
open(LOG,">$backup_dir/last_backed_up"); #记录备份的版本号
print LOG $youngest;
close LOG;
#如果想节约空间,则再执行下面的压缩脚本
print "Compressing dump file...n";
print `gzip -g $backup_dir/$next_backup_file`;

4)配置/etc/crontab文件
配置 /etc/crontab 文件,指定每周六执行weekly_backup.pl,指定周一到周五执行daily_backup.pl;
具体步骤俺就不啰嗦了.

5)备份恢复检查
在月底恢复检查中或者在灾难来临时,请按照如下步骤进行恢复:恢复顺序从低版本逐个恢复到高版本;即,先恢复最近的一次完整备份 weekly_full_backup.071201(举例),然后恢复紧挨着这个文件的增量备份 daily_incremental_backup.071202,再恢复后一天的备份071203,依次类推。如下:
user1>mkdir newrepos
user1>svnadmin create newrepos
user1>svnadmin load newrepos < weekly_full_backup.071201
user1>svnadmin load newrepos < daily_incremental_backup.071202
user1>svnadmin load newrepos < daily_incremental_backup.071203
....

如果备份时采用了gzip进行压缩,恢复时可将解压缩和恢复命令合并,简单写成:
user1>zcat weekly_full_backup.071201 | svnadmin load newrepos
user1>zcat daily_incremental_backup.071202 | svnadmin load newrepos
...

(这部分内容很多参考了《版本控制之道》)


2、svnadmin hotcopy整库拷贝方式
-------------------------
svnadmin hotcopy是将整个库都“热”拷贝一份出来,包括库的钩子脚本、配置文件等;任何时候运行这个脚本都得到一个版本库的安全拷贝,不管是否有其他进程正在使用版本库。
因此这是俺青睐的备份方式。

1)定义备份策略

备份频度:每天进行一次全量备份,
备份地点:备份目录以日期命名,备份路径到 /home/backup/svn/${mmdd}
备份保留时期:保留10天到15天,超过15天的进行删除。
备份时间:每晚21点开始
备份检查:备份完毕后自动运行检查脚本、自动发送报告。

2)建立备份脚本
在自己home目录 ~/下创建一个文件,backup.sh:

#!/bin/bash
SRCPATH=/home/svn/repos/; #定义仓库parent路径
DISTPATH=/home/backup/svn/`date +%m%d`/ ; #定义存放路径;
if [ -d "$DISTPATH" ]
then
else
mkdir $DISTPATH
chmod g+s $DISTPATH
fi
echo $DISTPATH
svnadmin hotcopy $SRCPATH/Project1 $DISTPATH/Project1 >/home/backup/svn/cpreport.log 2>&1;
svnadmin hotcopy $SRCPATH/Project2 $DISTPATH/Project2
cp $SRCPATH/access $DISTPATH; #备份access文件
cp $SRCPATH/passwd $DISTPATH; #备份passwd文件
perl /home/backup/svn/backup_check.pl #运行检查脚本
perl /home/backup/svn/deletDir.pl #运行删除脚本,对过期备份进行删除。

3)建立检查脚本
在上面指定的地方/home/backup/svn/下建立一个perl脚本:backup_check.pl
备份完整性检查的思路是:对备份的库运行 svnlook youngest,如果能正确打印出最新的版本号,则表明备份文件没有缺失;如果运行报错,则说明备份不完整。我试过如果备份中断,则运行svnlook youngest会出错。
perl脚本代码如下:

#! /usr/bin/perl
## Author:xuejiang
## 2007-11-10
## http://www.scmbbs.com
use strict;
use Carp;
use Net::SMTP;

#### defined the var #######

my $smtp =Net::SMTP->new('mail.scmbbs.com', Timeout => 30, Debug => 0)|| die "cann't connect to mail.scmbbs.comn";

my $bkrepos="/home/backup/svn/".&get_day;#定义备份路径
my $ssrepos="http://www.scmbbs.com/repos";#定义仓库url
my @repos = ("project1","project2");

my $title="echo "如下是昨晚备份结果与真实库对比的情况,如果给出备份版本数,则表示备份成功;如果给报错信息或没有备份版本数,则表示备份失败:" >./report";
system $title || die "exec failedn";
foreach my $myrepos(@repos)
{
my $bkrepos1=$bkrepos."/".$myrepos;
my $ssrepos1=$ssrepos."/".$myrepos;
my $svnlookbk1 = "echo "$myrepos 昨晚备份的版本是:">>./report;svnlook youngest ".$bkrepos1." >> ./report 2>&1";
my $svnlookss1 = "echo "$myrepos 真实库中的最新版本及最后修改时间是:">>./report;svn log -r'HEAD' ".$ssrepos1." >> ./report 2>&1";
system $svnlookbk1 || die "exec failedn";
system $svnlookss1 || die "exec failedn";

}

my $body ="echo "=========================================================================" >>./report";
my $bottom ="echo "备份位置:来自http://www.scmbbs.com的".$bkrepos."" >>./report";

system $body || die "exec failedn";
system $bottom || die "exec failedn";


###### report the result ####


open(SESAME,"./report")|| die "can not open ./report";
my @svnnews = <SESAME>;
close(SESAME);
foreach my $line1 (@svnnews)
{
print $line1."n";
}

my @email_addresses =("scm@list.scmbbs.com","leader1@scmbbs.com","leader2@scmbbs.com");
my $to = join(', ', @email_addresses);
$smtp->mail("scm@scmbbs.com");
$smtp->recipient(@email_addresses);
$smtp->data();
$smtp->datasend("Toton");
$smtp->datasend("From: svnReport@scmbbs.comn");
$smtp->datasend("Subject:svn备份检查报告".&get_today."n");
$smtp->datasend("Reply-to:scm@scmbbs.comn");
$smtp->datasend("@svnnews");
$smtp->dataend();
$smtp->quit;


#############


sub get_today
{
my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );
$year += 1900;
$month++;
my $today = sprintf( "%04d%02d%02d", $year, $month, $day);
return $today;
}
sub get_day
{
my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );
$year += 1900;
$month++;
my $today = sprintf( "%02d%02d", $month, $day);
return $today;
}


4)定义删除脚本

由于是全量备份,所以备份不宜保留太多,只需要保留最近10来天的即可,对于超过15天历史的备份基本可以删除了。
在/home/backup/svn/下建立一个perl脚本:deletDir.pl
(注意,删除svn备份库可不像删除普通文件那么简单)


5)修改/etc/crontab 文件
在该文件中指定每晚21点执行“backup.sh”脚本。

3、svnsync备份
-----------------------

使用svnsync备份很简单,步骤如下:
1)在备份机上创建一个空库:svnadmin create Project1
2)更改该库的钩子脚本pre-revprop-change(因为svnsync要改这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本):
cd SMP/hooks;
cp pre-revprop-change.tmpl pre-revprop-change;
chmod 755 pre-revprop-change;
vi pre-revprop-change;
将该脚本后面的三句注释掉,或者干脆将它弄成一个空文件。
3)初始化,此时还没有备份任何数据:
svnsync init file:///home/backup/svn/svnsync/Project1/ http://svntest.subversion.com/repos/Project1
语法是:svnsync init {你刚创建的库url} {源库url}
注意本地url是三个斜杠的:///
4)开始备份(同步):
svnsync sync file:///home/backup/svn/svnsync/Project1
5)建立同步脚本
备份完毕后,建立钩子脚本进行同步。在源库/hooks/下建立/修改post-commit脚本,在其中增加一行,内容如下:

/usr/bin/svnsync sync --non-interactive file:///home/backup/svn/svnsync/Project1

你可能已经注意到上面的备份似乎都是本地备份,不是异地备份。实际上,我是通过将远程的备份机mount(请参阅mount命令)到svn服务器上来实现的,逻辑上看起来是本地备份,物理上实际是异地备份。
re: 唯有弟兄.mp3 -屠洪刚 David 2010-01-11 14:33
似乎很多朋友都在找这个 屠洪刚的 唯有兄弟 这首歌曲啊,呵呵,本站有唯有兄弟MP3下载。
re: 唯有弟兄.mp3 -屠洪刚 David 2009-12-21 09:39
http://mp3.bimg.126.net/mu_d/7cCQMkv0eS_HzfAcJNr_Lg==/75998243711910978/%E5%B1%A0%E6%B4%AA%E7%BA%B2%20-%20%E5%94%AF%E6%9C%89%E5%85%84%E5%BC%9F.mp3
re: Oracle 11g Software Installation on Linux—CentOS-5 .3 David 2009-12-14 22:52
http://www.jameskoopmann.com/docs/Install_Oracle11gCentOS5.htm


oracle 11G + Centos 5.3 install manual
re: CentOS 5.x 系统下使用yum 升级php到5.2.x 最方便方法 David 2009-09-24 14:37
CentOS5.3 的php版本默认为5.1.6,然后在5.2.9版本之前的的php都存在一个漏洞,但是目前网上很多地方都无法使用yum update php*升级到5.2.9,比较常见的是升级到5.2.6版本的,经过搜索国外资料,现在终于找到一种升级CentOS的php到5.2.9的方法。
注意,此方法只能在官方的php版本上升级,如果你使用网上的升级到5.2.6版本的升级方法已经升级了,将无法使用本方法升级php。
运行下面命令:

wget http://download.fedora.redhat.co ... ease-5-3.noarch.rpm
wget http://rpms.famillecollet.com/en ... el5.remi.noarch.rpm

rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

然后编辑/etc/yum.repos.d/remi.repo
#vi /etc/yum.repos.d/remi.repo
在这个文件的最后增加一行:
priority=13

保存退出。

/etc/yum.repos.d/epel.repo和/etc/yum.repos.d/epel-testing.repo这两个文件也按照上面的方法进行编辑!

使用下面的命令进行升级,但是经过测试,如果单独升级php将提示失败,只有联通mysql一起升级才可以,所以我们必须执行以下命令才能升级php到5.2.9版本:
yum –enablerepo=remi update php* mysql*
re: chroot 工具 jailkit 限制用户 活动范围 和 权限 _ 笔记 David 2009-09-21 15:38
2. 配置jailkit

mkdir /home/jail

jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp


jk_init -v -j /home/jail basicshell
jk_init -v -j /home/jail editors
jk_init -v -j /home/jail extendedshell
jk_init -v -j /home/jail netutils
jk_init -v -j /home/jail ssh
jk_init -v -j /home/jail sftp

groupadd pals
useradd -g pals -m xy
passwd xy

jk_jailuser -m -j /home/jail xy

# 不需要改变
vi /etc/passwd
xy:x:1016:1016::/home/jail/./home/xy:/usr/sbin/jk_chrootsh

# 只需要改变 /bin/bash
vi /home/jail/etc/passwd
xy:x:1016:1016::/home/sharon:/bin/bash
re: 酒店智能管理系统(智能门锁,数码保险箱,节电开关等)[未登录] david 2009-07-16 10:23
可以给我用ic卡设计的节电开关的程序及原理图吗?谢谢!
我的油箱是david19984@126.com 非常感谢!
re: T400休眠后无法唤醒的解决方法 David 2009-04-23 22:58
联想地址是:http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-70477
re: T400休眠后无法唤醒的解决方法 David 2009-04-23 22:58
Installation instructions
Clean install
Windows Vista 32-bit

1. Start Windows Vista and logon with administrative privileges.
2. Click Start, then click Control Panel.
3. Click System and Maintenance, then click System.
4. Click Device Manager.
5. Expand the IDE ATA/ATAPI controllers category.\
6. Right-click Intel ICH8M SATA AHCI Controller or
Intel 82801HEM/HBM SATA AHCI Controller or
Intel 82801GBM SATA AHCI Controller or
Intel(R) ICH9M-E/M SATA AHCI Controller or
Intel(R) ICH9M/M-E Family 4 Port SATA AHCI Controller - 2929 or
RAID Controller
Standard AHCI 1.0 Serial ATA Controller
and then select Update Driver Software...

1. Click Browse my computer for driver software.
2. Click Browse..., then select the driver location and then click
Next.
3. Click Close when the installation has completed.
4. Click Yes to restart the computer.

Windows XP
Note: Be sure to install Intel Matrix Storage Manager Driver before installing the operating system. Otherwise your computer will not respond; it will only display a blue screen.

1. Attach a diskette drive to your computer.
2. Download Intel Matrix Storage Manager Driver from the Web site and extract the driver to C:\DRIVERS\WIN\IMSM and copy the driver to a diskette.
3. To make sure that SATA AHCI is enabled, start the BIOS Setup Utility menu.
4. Select Config.
5. Select Serial ATA (SATA).
6. Select AHCI or RAID*.
*Applicable only in ThinkPad W700.
7. Change the startup sequence of your computer. Following the instructions on the Startup menu in the BIOS Setup Utility, set the CD-ROM drive to start first.
8. Insert the CD for Windows XP into the CD or DVD drive, and restart the computer.
9. To install a third-party SCSI or RAID driver first, press F6.
10. When prompted, select S for Specify Additional Device.
11. When prompted, insert the diskette that you created in step 2, and press Enter.
12. If your system has Intel 82801HEM/HBM SATA AHCI Controller, select Intel 82801HEM/HBM SATA AHCI Controller (Mobile ICH8M-E/M), and press Enter.
If your system has Intel 82801GBM SATA AHCI Controller, select Intel 82801GBM SATA AHCI Controller (Mobile ICH7M/DH), and press Enter.
If your system has Intel(R) ICH9M-E/M SATA AHCI Controller, select Intel(R) ICH9M-E/M SATA AHCI Controller, and press Enter.
If you selected RAID mode in ThinkPand W700, select Intel(R) ICH8M-E/ICH9M-E SATA RAID Controller.
* Note: If you do not see your controller listed, use the arrow keys to scroll through the complete list. This package contains drivers for several controllers that are not displayed by default.
13. To continue the installation, press Enter again. Leave the diskette in the drive until the next reboot; the software may need to be copied from the diskette again when the files are copied during setup.
14. Follow the instruction to complete the OS installation.

Note: If you do not have a diskette drive, you can install Intel Matrix Storage Manager Driver by the following alternative procedure:

If you do not have a diskette drive, you can install Intel Matrix Storage Manager Driver by the following alternative procedure:

1. Start the BIOS Setup Utility menu.
2. Select Config.
3. Select Serial ATA (SATA).
4. Select Compatibility.
5. Install Windows XP and Service Pack 2.
6. Download Intel Matrix Storage Manager Driver from the Web site and extract the driver to C:\DRIVERS\WIN\IMSM.
7. Run Intel Matrix Storage Manager Driver. To do this, go to C:\DRIVERS\WIN\IMSM\PREPARE, and double-click install.cmd.
8. Turn the computer off and then on again.
9. Start the BIOS Setup Utility menu.
10. Select Config.
11. Select Serial ATA (SATA).
12. Select AHCI.
13. Start Windows XP. The Welcome to the Found New Hardware Wizard appears.
14. Click No, not this time and click Next.
15. Select Install from a list or specific location(Advanced), then click Next.
16. Select Search for the best driver in these locations. Then select Include this location in the search:, specify the path, C:\DRIVERS\WIN\IMSM, and click Next. The Completing the Found New Hardware Wizard appears.
17. Click Finish.
18. When the System Settings Change window appears, click Yes. The computer restarts.

Update install

1. Start Windows XP.
2. Right-click My Computer and select Properties from the pop-up menu.
3. Click the Hardware tab and click Device Manager.
4. Click the + mark to expand IDE ATA/ATAPI controllers.
5. Right-click Intel 82801HEM/HBM SATA AHCI or Intel 82801GBM SATA AHCI Controller or Intel(R) ICH9M-E/M SATA AHCI Controller or Intel(R) ICH8M-E/ICH9M-E/M SATA RAID Controller and click Properties.
6. Click the Driver tab.
7. Click Update Driver.
8. If running Windows XP:
1. Select No, not this time and click Next.
2. Select Install from a list or specific location.
3. Click Next button.
4. Select Search for the best driver in these locations and Include this location in the search.
9. Click Browse.
10. Locate the driver folder and click OK.
11. Click Next. The driver installation starts.
12. Click Finish when the installation completes.
13. Click Close.

Determining which version is installed
To check the version of the device driver that is installed on your system, follow these instructions:

Windows Vista 32-bit

1. Right-click My Computer and click Properties.
2. Click the Hardware tab and click Device Manager.
3. Click the + sign in front of the IDE ATA/ATAPI controllers category.
4. Double-click Intel 82801 HEM/HBM SATA AHCI Controller or Intel 82801GBM SATA AHCI Controller or Intel(R) ICH9M-E/M SATA AHCI or Intel(R) ICH8M-E/ICH9M-E/M SATA RAID Controller.
5. Click the Driver tab, the driver version is displayed.

Windows XP

1. Right-click My Computer and click Properties.
2. Click the Hardware tab and click Device Manager.
3. Click the + sign in front of the IDE ATA/ATAPI controllers category.
4. Double-click Intel 82801 HEM/HBM SATA AHCI Controller or Intel 82801GBM SATA AHCI Controller or Intel(R) ICH9M-E/M SATA AHCI or Intel(R) ICH8M-E/ICH9M-E/M SATA RAID Controller.
5. Click the Driver tab, the driver version is displayed.
re: 今日在美国联想网站通过CPP购买thinkpad T400过程[未登录] David 2009-02-26 10:46
机器配置:

P8400+1G内存+160G硬盘+LED显示器无摄像头。无蓝牙,3G

价格保护写邮件比较慢,而且要多些几封,因为你不知道人家有没有看。

打电话很好,只要你能说英文,而且有时候是MM,有时候是印度阿哥,不用担心打电话费用,你可以申请个SKYPE,免费的SKYPE可以打美国LENOVO 的免费电话的. 我用的SKYPE 官方版,不是TOM版。
re: 今日在美国联想网站通过CPP购买thinkpad T400过程[未登录] David 2009-02-26 10:40
2/17已经收到货物了,随后电子发票已发送到邮件,可以打印。
由于近期Lenovo搞了一个15%的折扣码,我买的时候只是用10%的折扣码, 所以02/16又发邮件,打电话申请了价格保护。现在lenovo又退回48$到我的信用卡中,最终价格为830$, 还人民币也不过6000¥啊,国内的Thinkpad T400价格真是高啊,都在1W以上了,怪不得Lenovo今年又亏损了。

总结lenovo 给我的印象是:自己的业务没做好,买了个最好ThinkPad又不会经营,把最好的东西也搞砸了。

无语,我的货物转了几个国家,还是到了国内在用。而且比国内还便宜。


另外回答上面朋友问的发票问题:
电子邮件里发票提及两个信息:

Sold To:写的是收货人名 Ship To:写的是公司名,因为我当时填了公司名

购买是Bill 地址和Ship地址写的人名都是我收货朋友的,信用卡用的我自己的。
re: 今日在美国联想网站通过CPP购买thinkpad T400过程[未登录] David 2009-02-17 23:08
发票还没考虑,但联想给的order上显示有发票号码。应该算是有吧
re: 今日在美国联想网站通过CPP购买thinkpad T400过程 David 2009-02-15 17:12
已经查到货物2/17/2009送
re: Windows 2000域控制器+Exchange 2000迁移至Windows 2003域控制器+Exchange 2003的成功经历[未登录] David 2009-01-11 14:56
我在VMware模拟生产环境做了过一次完整的升级,应该是先
“在一台域控制器上从Exchange 2003安装盘I386目录中分别运行adprep /forestprep、adprep /domainprep”进行扩展,再进行AD,R2的扩展,不然回出现2楼的问题
re: Brocade 博科交换机缺省帐号密码 David 2008-05-09 09:42
可以试一下用root口令恢复:
root/fibranne
如果能登录,使用 passwddefault 命令重置密码。



通过如下方法取得root权限:
1. 连接串口并确定可以显示终端
2. 重启交换机,在终端上显示“press ESC key within 4 sec….”时,4秒钟内按下ESC键
3. 会显示一个菜单,选择Command Prompt shell
4. 输入命令:mount -o remount,rw,noatime /
5. 输入命令:mount /dev/hda2 /mnt
6. 输入命令: passwddefault 或 passwd admin(仅重置admin用户密码)
7. reboot -f

*** 如果第5步失败,则解决方法:
Printenv
找到“OSRootPartition” 参数, 然后mount第二个partition (通常是 hda2)



200E上有人这么做过
re: 使用xml语言自动导入测试需求到开源测试工具testlink[未登录] David 2007-12-10 16:51
楼主导入 需要做什么配置吗?我的导入按钮点击后页面时空白的。
re: 关于Windows 2003 新域服务器新增用户不成功,windows 无法设置XXXX的密码 原因是:密码不满足密码策略的要求。检查最小密码长度、密码复杂性和密码历史的要求 David 2007-11-09 18:16
照本站以上说明更改,重新启动就可成功
re: 新版本mysql 密码无效 David 2007-10-10 14:07
在更新到 4.1.1x 版本的 MySQL 后,发现需要使用 MySQLi 扩展方能正常使用数据库,否则会出现 1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client 的提示,这个很纳闷,我没有研究具体的问题,只是切换到 MySQLi 扩展,其实在给 root 加上密码前还是可以使用 MySQL 扩展的,可是给 root 加上密码后就出现了上述客户端版本太低的提示。
  目前已知解决方法:


先用root登录MYSQL服务器,执行

mysql>set password for user1@"localhost"=old_password('yourPassword');

  原因是因为你使用的mysql服务器版本中使用了新的密码验证机制,这需要客户端的版本要在4.0以上,原来的密码函数被改为old_password();,这样使用password()生成的密码在旧的版本上的客户端就不好使了,而PHP中的MYSQL客户端都是3.23的(当然,mysqli的扩展除外),问题就在这了。

re: Google Earth Online-在线地球 [未登录] David 2007-08-20 14:14
Very Cool!!!!!!!!!!
re: FTP下载恢复[未登录] David 2007-08-16 19:15
大哥真是好人啊,正在下载,最近在搞project server的事情,好多事情还不懂 :(
re: 恢复SCO UNIX超级用户口令 David 2007-07-15 13:07
root口令忘记的解决方法


各位有时一定会一不小心忘记root的密码吧,(本人有过)是不是很急啊,也许我的一点笨办法会让你解决这个问题的。
第一,你有一张root和boot的起动盘,通过root 和boot盘起动这个我就不用说了吧。(没有这两个起动盘,也可以找一个安装盘来起动)
第二,起动后你要把系统挂在root的盘上。(要是安装盘起动,就挂在安装盘上)
第三,在起动后的系统里找到passwd和shadow这两个文件,用mv把这两个文件名给改掉。(cd /etc下有这两个文件)
第四,重起机子,你就会进入系统,但不会是多用户的系统,这时你在把两个文件改回成原来的名字,在用scoadmin给root一个新的口令就ok了。
re: Apache 安全控制(Apache 允许部分IP+不允许部分用用户名加密码控制) David 2006-09-29 15:13
一.基本的Apache用户认证方法:

若对某一目录下的文件如/home/ftp/pub需要做到用户认证,则在httpd.conf
中加入下面的行
<>
options indexes followsymlinks
allowoverride authconfig
order allow,deny
allow from all

<>
用在目录/home/ftp/pub下放文件.htaccess,内容如下:
authname "shared files"
authtype basic
authuserfile /etc/.passwd
require valid-user

用随Apache来的程序htpasswd 生成文件/etc/.passwd,每行一个用户名:密码

只要能提供正确的用户名和密码对,就允许登录访问,这是针对任何地址来的
请求都要求提供用户名和密码认证。

二.针对部分网段或地址要求认证。

若公司LAN所在网段为192.168.0.0/24,且有一防火墙专线接入Internet,
内部网卡的地址为192.168.0.1/32,则现在希望所有通过拨本地163通过
防火墙上的apache反向代理向LAN上的另一WWW服务器访问时需要认证,而本地
LAN上的用户不需认证。可以在httpd.conf中放入:
〈Directory /home/ftp/pub>
Options Indexes FollowSymLinks
AllowOverride AuthConfig
order deny,allow
deny from 192.168.0.1
〈/Directory>

且在/home/ftp/pub/.htaccess中放入:
AuthName "shared files"
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user
satisfy any

三.对同一目录及其下的子目录有不同的权限,仅某些人可以存取一目录下的
子目录。
如有一目录/home/ftp/pub/sales,有三个用户user1,user2,user3都需要用户名
和密码进入/home/ftp/pub,但仅user1,user2能进入/home/ftp/pub/sales.则
放下面的行到httpd.conf

〈Directory /home/ftp/pub>
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
〈/Directory>

〈Directory /home/ftp/pub/sales>
Options Indexes
AllowOverride AuthConfig
order allow,deny
allow from all
〈/Directory>

且看/home/ftp/pub/.htaccess为:
AuthName "shared files"
AuthType Basic
AuthUserFile /etc/.passwd
require valid-user

且看/home/ftp/pub/sales/.htaccess
AuthName "shared files"
AuthType Basic
AuthUserFile /etc/.passwd
AuthGroupFile /etc/.salesgroup
require group manager

且文件/etc/.passwd内容为:
user1:passwd1
user2:passwd2
user3:passwd3

且文件/etc/.salesgroup内容为:
manager: user1 user2
 
Powered by:
IT博客
Copyright © David