以技术为主
Linux编程
定时备份网站代码与数据的shell工具
四 12th
需求
鉴于国内网络环境的恶劣,本人的blog的托管在国外的vps,为了防范数据丢失,需要及时备份下网站的数据和代码,这样等哪天数据丢失即可及时恢复,数据最重要
解决方法
自己就通过查找资料,简单地写了shell脚本
- 首先打包wordpress代码,使用mysqldump导出mysql数据
- 其次使用mail命令发送数据到指定邮箱
- 最后crontab定时执行
即可搞定
另外在使用mail命令行工具时遇到了一个问题,stackoverflow帮我解决了,具体在这里
实现脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash # author: yaronli (jidalyg_8711@163.com) # powered by yaronspace.cn set -x backup() { cd /var/www/ #打包代码 tar -czf /tmp/${1}_$(date +%F).tar.gz ${1} #导出数据 mysqldump -u${2} -p${3} ${1} > /tmp/${1}_$(date +%F).sql #以附件形式发送邮件 (uuencode /tmp/${1}_$(date +%F).tar.gz ${1}_$(date +%F).tar.gz; uuencode /tmp/${1}_$(date +%F).sql ${1}_$(date +%F).sql)\ | mail -s ${1}_$(date +%F) yangguangli19871124@gmail.com } #param1: 站点目录 param2: 数据库用户 param3: 密码 backup yaronspace **** **** backup xiaofangdeng **** **** |
使用 cron、bash 和 wget 监控 Web 服务器的状态[转载]
三 29th
原文地址:http://www.oschina.net/question/12_45835
比较好的文章,分享下
需求列表:
- 要求是 bash, wget, 以及 “mail” 命令 (sendmail, exim, postfix, 之类)
- 可监控任何 HTTP/HTTPS URL, 检查 “200″ 状态返回
- 检查请求返回时间,用于监控一些慢响应
- 通过 Email 发送异常状态提醒
- 可定制的接收异常信息的邮箱
- 可定制慢响应的时间
- 避免重复发送相同的异常提醒
- 使用简单文本文件作为数据存储,不需要数据库
crontab脚本如下:
*/5 * * * * root /home/username/sitemonitor.sh
sitemonitor.sh脚本如下: 更多 >
在Debian下安装Systemtap方法
三 8th
关于Systemtap的介绍,请移步到 这里 ,是调试内核和分析系统软件瓶颈的利器
今天主要介绍下在debian系统的安装
1. 安装Systemtap
sudo apt-get install systemtap
2. 安装elfutils
apt-get install elfutils
3. 安装kernel debug info包,否则无法追踪内核信息
uname -r #查看内核版本 sudo apt-get install linux-image-2.6.32-5-amd64-dbg # 2.6.32-5-amd64为uname -r的命令输出 sudo apt-get install linux-headers-2.6.32-5-amd64
4. 测试
sudo stap -k -e <code>'probe begin{printf("hello"); exit();}'
具体关于Systemtap语法的使用,请参考下面链接
http://sourceware.org/systemtap/documentation.html
http://www.abc188.com/info/html/wangzhanyunying/jianzhanjingyan/20080417/69732.html
5. 参考文章
1. http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html
gdb调试程序之监控内存【七】
二 12th
gdb提供awtach rwatch watch来监控调试中变量或者内存的变化
awatch 命令
awtach [expr]
当debugger read或者write该expr时,debugger 停止
rwatch 命令
rwatch [expr]
当debugger read该expr时,debugger停止
watch命令
watch [expr]
当debugger write该expr时,debugger停止
说明:expr可以是变量或者是内存地址
vim使用技巧小结【继续更新】
十二 22nd
笔者在本博客上之前记录了vim相关方面的用法,现在总结下,记录的文章如下:
2. Vim纵向编辑模式的用法
4. vim中两个实用插件doxygen和projects的安装与使用
5. VIM查找替换归纳总结
6. vim编辑多个文件的方法
关于const与volatile笔试题目的分析
十 17th
昨天笔试遇到了关于c++中关于const与const_cast的题目,大概如下:
int main(int argc, char* argv[]) { const int a = 10; int * p = const_cast<int *>(&a); *p = 1; printf("%d %d\n", a, *p); return 0; }
求上述程序的输出结果,正确答案是:10 1
分析如下:
首先可以确定是p和&a的地址是指向同一片内存区域的,理论上来说最后的输出结果应该是1 1
但是为什么会输出a的值为10呢? 猜测应该是const关键字的问题,可能编译器看到a为const型变量,所以在编译期就将所有的a直接替换为10了,这个是编译器做的一个优化,
下面简单的验证下:
直接使用下面的命令来看下编译后的汇编代码,关键部分的汇编如下:
movl %edi, -20(%rbp) movq %rsi, -32(%rbp) movl $10, -12(%rbp) leaq -12(%rbp), %rax movq %rax, -8(%rbp) movq -8(%rbp), %rax movl $1, (%rax) movq -8(%rbp), %rax movl (%rax), %edx movl $10, %esi movl $.LC0, %edi movl $0, %eax call printf movl $0, %eax leave ret
显然%rax中存放的指针p的值,(%rax)代表间接寻址
在调用printf函数之前,将10放入%esi, (%rax)放入到%edx中,显然验证了上述的猜想
关于volatile关键字
如何避免编译器做这方面的优化呢?
一个常用的方法是将变量a加上关键字volatile,代表是”易变,每次都需要从内存中读取,这样上述程序的运行结果就是1 1了
当然修改常量变量的值不是好的编程习惯,尽量还是少用上述用法
linux关于sort命令的高级用法(按多个列值进行排列)
十 8th
如果单纯地使用sort按行进行排序比较简单,
但是使用sort按多个列值排列,同时使用tab作为分隔符,而且对于某些列需要进行逆序排列,这样sort命令写起来就比较麻烦了
比如下面的文件内容,使用[TAB]进行分割:
Group-ID Category-ID Text Frequency ---------------------------------------------- 200 1000 oranges 10 200 900 bananas 5 200 1000 pears 8 200 1000 lemons 10 200 900 figs 4 190 700 grapes 17
下面使用这些列进行排序(列4在列3之前进行排序,而且列4是逆序排列)
* Group ID (integer)
* Category ID (integer)
* Frequency “sorted in reverse order” (integer)
* Text (alpha-numeric)
排序后的结果应该为:
Group-ID Category-ID Text Frequency ---------------------------------------------- 190 700 grapes 17 200 900 bananas 5 200 900 figs 4 200 1000 lemons 10 200 1000 oranges 10 200 1000 pears 8
可以直接使用sort命令来解决这个问题:
sort -t $'\t' -k 1n,1 -k 2n,2 -k4rn,4 -k3,3 <my-file>
解释如下:
-t $'\t':指定TAB为分隔符 -k 1, 1: 按照第一列的值进行排序,如果只有一个1的话,相当于告诉sort从第一列开始直接到行尾排列 n:代表是数字顺序,默认情况下市字典序,如10<2 r: reverse 逆序排列,默认情况下市正序排列
所以最后的命令:sort -t $'\t' -k 1n,1 -k 2n,2 -k4rn,4 -k3,3 my-file
debian系统sshd连接慢的解决办法
八 26th
最近客户端连debian下sshd很慢,每次都需要等待半分钟左右,今天终于无法忍受了,上网找了下资料,把这个问题解决了
原因:
主要是debian在默认情况下开启了dns的反向解析,这个比较耗时
解决方法:
1. 编辑/etc/nsswitch.conf 找到hosts行,替换为
hosts: files dns [NOTFOUND=return]
2. 查看/etc/resolv.conf文件,查看dns地址是否设置正确,如果没有用,直接注掉即可
3. 重启sshd : 先kill掉,然后/usr/sbin/sshd 启功即可
查看 CPU, Memory, I/O and NetFlow[转载]
八 10th
原文地址:http://blogread.cn/it/article.php?id=3908&f=sa
iostat 查看磁盘 I/O
[root@localhost ~]# iostat -d -x 2
extended device statistics
device mgr/s mgw/s r/s w/s kr/s kw/s size queue wait svc_t %b
hda 0 0 0.0 0.9 0.1 5.4 6.3 0.0 4.7 0.9 0
extended device statistics
device mgr/s mgw/s r/s w/s kr/s kw/s size queue wait svc_t %b
hda 0 3 0.0 2.0 0.0 20.0 10.0 0.0 0.8 0.5 0
......
命令释意: 查看磁盘 I/0 情况,且每两秒刷新一次
[root@localhost ~]# vmstat 5 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 284 68700 165876 416748 0 0 0 5 1 1 0 0 100 0 0 ......
命令释意: 查看CPU使用情况的命令, 每 5 秒刷新一次,最右侧列为 CPU 的占用率的数据
top 查看进程占有率
[root@localhost ~]# top
然后在 top 的命令内部命令栏输入shift+p or P
top - 13:38:52 up 102 days, 4:17, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 81 total, 2 running, 79 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1035292k total, 966592k used, 68700k free, 165876k buffers
Swap: 2096472k total, 284k used, 2096188k free, 416760k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4875 root 15 0 2192 1000 800 R 0.3 0.1 0:00.15 top
1 root 15 0 2060 620 532 S 0.0 0.1 0:01.65 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0
.......
命令释意: 查看进程处理器占用率情况,并对其进行排序
free 查看内存使用情况
[root@localhost ~]# free
total used free shared buffers cached
Mem: 1035292 966592 68700 0 165876 416768
-/+ buffers/cache: 383948 651344
Swap: 2096472 284 2096188
命令释意: 查看内存使用情况
top 查看进程内存使用
[root@localhost ~]# top
然后在 top 的命令内部命令栏输入shift+m or M
top - 13:48:52 up 102 days, 4:27, 1 user, load average: 0.00, 0.01, 0.00 Tasks: 81 total, 2 running, 79 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1035292k total, 966592k used, 68700k free, 165876k buffers Swap: 2096472k total, 284k used, 2096188k free, 416784k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 4128 root 34 19 280m 266m 2112 S 0.0 26.4 1:48.40 yum-updatesd 8314 www 18 0 171m 34m 34m S 0.0 3.4 0:06.03 memcacheq 8280 www 15 0 88084 34m 588 S 0.0 3.4 0:01.23 memcached 10907 mysql 15 0 122m 16m 3892 S 0.0 1.7 0:25.29 mysqld ......
命令释意: 查看进程内存占用率情况,并对其进行排序
更多 >
近期评论