标签归档:linux

异地备份

原来咨询过阿里云的客服,说是每天磁盘都有镜像,我也能看到镜像,所以本来是不考虑再做异地备份了,相信阿里云,相信政府。但有一个瞬间,我觉得异地备份不是一件麻烦的事情,于是今天就做了如下操作

备份

利用现有的条件做备份

  1. 服务器默认安装了SVN,不用白不用
  2. 我默认有SVN服务器,不用白不用
  3. 我需要做的只是使用mysqldump导入wordpress数据库,利用cp拷贝出uploads目录
  4. 然后再svn commit一下,就可以每天生成一个版本

这样做的好处

  • 显而易见,这样做两台服务器都不需要额外安装任何工具,只需要新建一个仓库写一个脚本就完事了,如何腾不出这点时间呢
  • SVN做的是差异备份,这样做比每天一个目录更省空间,你尽可以每天提交一个版本

具体操作

  1. 新建SVN仓库,假设叫backup
  2. svn checkout https://svn.server/backup
  3. 配置/etc/my.cnf,将mysql的用户名密码写到[mysqldump]下
  4. 执行mysqldump wordpress > backup/wordpress.sql
  5. 执行yes|cp -r /path/to/wordpress/wp-content/uploads/ backup/
  6. cd /path/to/backup
  7. svn commit -m “date +”%Y-%m-%d”
  8. crontab -e
  9. 增加一行0 1 * * * /bin/sh /root/backup.sh

这样,每天在凌晨1点的时候,会自动备份数据库和附件的目录到SVN服务器

资源下载

backup.sh下载

抓取上海教育考试院的报名信息并短信通知

由于有过惨痛教训,老是错过重要的考试报名通知,所以这段代码抓取了上海教育考试院的报名页面,分析并发送短信通知相应的考试人员,然后将这个页面放到服务器上,每日定时检查,一有新的报名信息就能及时得知。中间涉及到部分php的知识点

    1. fscoketopen,上一篇已经写过相应的介绍,即可以用其来模拟web service调用,也可以使用其来抓取页面
    2. 正则表达式,preg_match,用来提取抓取后页面返回的数据
    3. 编码转换iconv,抓取的页面是GBK类型,如果不转换,则在控制台显示乱码。第二个是发送短信的接口,由于我使用的接口是GBK数据,所以我需要再从UTF-8转换到GBK
    4. php文件的相关操作函数:file_exists用来判断文件是否已经存在,fopen用来打开文件,fgets用来读取一行,fputs用来写入一行。
    5. 数组模拟push方法,使用arr[] = something;的形式
    6. vim 格式化代码 :gg=G
    7. vim 批量添加 //注释::10,50s#^#//#g ;批量删除 :10,50s#^//##g
    8. 定时的方法使用crontab -e,就可打开定时列表,设置成每天10点通知:
0 10 * * * /path/to/php /path/to/spta.php

spta.php

function get_spta() {
    $content = '';

    $fp = fsockopen('www.spta.gov.cn', 80);
    fwrite($fp, "GET /appendix/wsbm.html HTTP/1.0\r\n");
    fwrite($fp, "Host: www.spta.gov.cnrn");
    fwrite($fp, "Content-Type: text/html; charset=utf-8\r\n");
    fwrite($fp, "Content-Length: ".strlen($content)."\r\n");
    fwrite($fp, "\r\n");

    fwrite($fp, $content);

    $item = array();
    while (!feof($fp)) {
        $result = iconv('GBK', 'UTF-8', fgets($fp));
        if (strpos($result, '<td align="left">') > 0) {
            preg_match('/>([^<]*)</', $result, $matches);
            $title = $matches[1];
            $url = iconv('GBK', 'UTF-8', fgets($fp));
            preg_match('/href="([^"]*)"/', $url, $matches);
            $url = $matches[1];
            $item[] = array('title' = >$title, 'url' = >$url);
        }
    }
    fclose($fp);
    return $item;
}
function sent_sms($mobile, $msg) {
    $vars = "&mobs=$mobile&msg=".iconv('UTF-8', 'GBK', $msg);
    $fp = fsockopen('smsserver.com', 80);
    fwrite($fp, "GET /sms?$vars HTTP/1.0\r\n");
    fwrite($fp, "Host: smsserver.com\r\n");
    fwrite($fp, "\r\n");

    fwrite($fp, $content);
    fclose($fp);
}
$items = get_spta();
$title = '';
$path = '/path/to/spta';
if (file_exists($path)) {
    $file = fopen($path, 'r');
    $title = fgets($file);
}
foreach($items as $bean) {
    if ($title != $bean['title']) {
        sent_sms('your mobile', $bean['title'].'[考试院]');
        echo $bean['title']."n";
    } else {
        break;
    }
}
$file = fopen($path, 'w');
fputs($file, $items[0]['title']);

CentOS 6.2图形界面和命令行调整方法

经常用到需要将图形界面调整到命令行界面的时候,对于大部分linux系统来说,只需要修改以下配置

  1. vi /etc/inittab
  2. 找到id:5:initdefault:
  3. 将其中的5改成3,保存退出
  4. reboot

重启后即可进入命令行,如果想再次进入图形界面可以使用

  • startx
如果后悔了,想每次都进入图形界面则:
  1. vi /etc/inittab
  2. 找到id:3:initdefault:
  3. 将其中的3改成5,保存退出
  4. reboot

另外查看当前release的版本,如:我当前是CentOS,但我不知道具体的版本号可以用以下命令

  • lsb_release -a
  • cat /etc/redhat-release

想查看我linux内核的版本以及我系统版本是32位系统还是64位系统,可以使用以下命令

  • uname -a

以下命令有待验证:

  • ctrl+alt+1 …… ctrl+alt+6一共六个控制台可以切换,由于我安装虚拟机,ctrl + alt跟虚拟软件有冲突,所以没实验成功

xmapp proftpd新建用户

很简单的事情让我找了好长时间,

1、修改iptable,开放21端口vi /etc/sysconfig/iptables,重启iptables服务,/etc/init.d/iptables restart

image

2、使用/opt/lampp/etc/proftpd.conf中的UserPassword字段定义用户名和密码,密码可以到http://www.kxs.net/support/htaccess_pw.html生成,然后拷贝到这里;其实上面的注释已经写的很清楚了,默认密码是lampp,如果想自己设置密码的话也可以使用lampp security

image

image

4、重启lampp,/opt/lampp/lampp restart

5、使用这个账户登录

image

这样更新wordpress就不需要再手动更新了

系统之争

今天遇到两件事情,勾起了我对系统的思考。一件是看到一篇文章,linux和windows之争的相关文章,主要是强调windows下能干的有意义的事情linux下都能完成,而linux下能做的事情在windows下未必能完成。作者也承认了游戏不是linux的长项,但他说游戏有更成熟的替代器,如PSP等专门的游戏设备比windows下的游戏体验性要好上很多;第二件事情是思考iphone下的开发,iphone的开发环境需要在mac os下进行,这使得我目前比较难办,要么买一台mac的设备,这是比较保险的一种做法,要么尝试虚拟机安装mac os,或者在x86机器上直接安装mac os。但这几种做法都存在着一个问题,我为了iphone的开发真的就要从自己熟悉的windows系统转到mac os上去吗?

确实挺难办的,所以才成就了VMWare和VMPlayer这样的软件,因为很多时候我们都需要多个系统,有时候仅仅是满足我们一方面的要求而已。我非常赞成并支持linux下编程的做法,所有的程序或配置都能用文本的形式描述出来,而不需要复杂的ide,因为IDE毕竟需要一个庞大系统的支撑,切换成另外一个系统就不是那么简单的一件事情了。刚看完linux下处理问题的优势,就让我遇到了IOS开发的难题,真是不得不说这是一个极大的讽刺,每个系统公司都想让自己的系统占为用户的主导,这就导致了用户选择上的障碍,开发上的障碍,我为了开发.NET程序不得不装一个windows系统,我为了开发IOS程序,不得不装一个MAC OS;为了他们,我不得不在linux, windows, mac os三者之间做出选择,或者三者皆用,但这样要耗费掉我们多少精力啊

虽然虚拟软件可以解决一部分的问题,但并不能解决全部的问题,一些系统升级带来了开发不兼容的问题迟早会出现,到时候还是不得不再寻找一些这样的设备来完成自己的任务