最近在:http://mosir.org/ 的网站上发现一些好文章。比如这篇我要转的这篇。毕竟我现在用的就是VPS,用VPS的话,你也知道,最担心的是什么?有几点?
1、服务器的母机会突然挂掉(当然任何机器都会有这种情况)。怎么样快速转移,或者是有备份机?(小网站可能就是在等待了)
2、母机商跑路。这个嘛,在大家的VPS经历里还是会遇到过的。现在都是推荐选择大一点的供应商,比如virtualhost/linode/ovh等。我现在尽量不选择太便宜的,贵就贵一点,稳定。。。
3、备份,你总不能完全相信说服务器商对你说的,都是用的raid1服务器吧?总有万一的时候,这时候怎么办?
其实早些年都有一些脚本在网上流传,比如,mysql定时备份,自动发邮件到自己邮箱。(小网站都没问题,mysql最多也就上百M,每天增量的话,也没多少,就算全量,现在的mail其实也完全可以。大不了再压缩一下。大不了再切割一下,总能解决),对于代码什么的,现在都会想着是git发布/svn发布等,代码也能够保存在本地。然后附件直接存储到第三方。所有的就都解决了。但毕竟这样是存储在多个地方了。
于是这才是我转贴本文的原因,原文来自:http://mosir.org/html/y2012/use-dropbox-backup-vps.html
XML/HTML代码
- vps的定期备份是一件很必要的工作。大多数idc并没有提供免费的vps备份空间,这就需要我们自己来完成这个工作了。
-
- 一般情况下,得自己打包需要备份的数据,然后下载到本地,但这太麻烦。也有人通过lftp及脚本工具将需要备份的数据上传到某些ftp服务器上,但这也不稳妥。想找个稳妥的方法似乎只能出钱买备份空间了。
-
- 还好Dropbox提供了比较大的免费空间来让我们备份数据,申请了帐号后,只有2G空间,但可以很容易的扩展到20G左右,用来备份vps上的程序和数据也够了。如果需要更大的空间,可以考虑购买。
-
- 当然,靠谱的网盘有不少,但使用起来方便的并不多。这里就只考虑dropbox了。
-
- 在vps里的安装方法很简单,官方的说明在这里:https://www.dropbox.com/install?os=lnx
-
- 步骤如下:
-
- cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf -
- 这会在vps服务器上当前用户目录下创建.dropbox-dist目录并解压所有所需文件。
-
- 接下来运行dropboxd
-
- ~/.dropbox-dist/dropboxd
- 它会自动在用户目录下创建Dropbox目录。
-
- 然后你会看到不断出现类似这样的提示:
-
- This client is not linked to any account...
- Please visit https://www.dropbox.com/clilink?hostid=6a57828b2191161aea851e72a48f8451&cl=en_US to link this machine.
- 不要中断dropboxd的运行,将https://xxx链接复制出来,打开浏览器登录你的dropbox帐号,再把这个链接复制到浏览器打开,将vps机器加入到你的帐号中。
-
- 然后,有什么需要备份的打包后丢到~/Dropbox目录下即可。
-
- 因为dropboxd大约要占用2XM~1xxM的内存,所以同步完成后,按Ctrl-C中止其运行即可。
-
- 也就是说需要备份时运行dropboxd,备份完就中止它。
-
- 如果vps内存充足,也可以把它作为一个服务运行。可以下载官方的控制脚本:https://www.dropbox.com/download?dl=packages/dropbox.py,编辑rc.local,加入
-
- /yourpath/dropbox.py start
- 这样,vps启动后就会自动运行dropbox,保证只要有新的备份文件被放到Dropbox目录就立即被同步到dropbox网络存储空间里去。
-
- 如果只希望同步dropbox目录下的某个子目录,或不希望同步某些子目录,可以自己参考修改dropbox.py,大约在1105行,这里有个排除列表的函数及使用说明。
-
- 完成。
赞。过两天试试
重启apache的时候报错:
/etc/init.d/apache2 restart
[....] Restarting web server: apache2apache2: apr_sockaddr_info_get() failed for (none)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
... waiting apache2: apr_sockaddr_info_get() failed for (none)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
. ok
看到这个(none),让我想起,我的ssh的登录路径:root@(none):~#
OK,在老鬼的提示上,用hostname函数进行了设置。问题解决:
root@(none):~# hostname
(none)
root@(none):~# hostname neatstudio.com
root@(none):~# hostname
neatstudio.com
--做个笔记
最近听到supervisor的机会越来越多了,主要是因为越来越喜欢将程序放到底层去运行,但又需要守护程序来监控它,万一它挂了怎么办?如果为每个程序都写上这样的脚本,那得写多少啊?
结果,在最近的看到的网上的内容里,就看到一大堆人在说用supervisor吧。
1、Asta谢的《build-web-application-with-golang》:第12章:应用部署
2、还是Asta谢的beego框架:Supervisord
3、来自the5fire的:进程管理器supervisor的使用(django实例)
其实还有很多关于这样的内容,就不一一贴出来了。只是beego框架中的介绍会相对比较简单,所以可以拿来当教程,再加上我的程序可能也会趋向于使用go来开发,就转贴一下这篇博客吧,只有三步:
-
安装 setuptools
wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg sh setuptools-0.6c11-py2.7.egg easy_install supervisor echo_supervisord_conf >/etc/supervisord.conf mkdir /etc/supervisord.conf.d
-
修改配置 /etc/supervisord.conf
[include] files = /etc/supervisord.conf.d/*.conf
-
新建管理的应用
cd /etc/supervisord.conf.d vim beepkg.conf
配置文件:
[program:beepkg] directory = /opt/app/beepkg command = /opt/app/beepkg/beepkg autostart = true startsecs = 5 user = root redirect_stderr = true stdout_logfile = /var/log/supervisord/beepkg.log
其实说白了就是利用sed,但怎么个用法,确实是有点想法,毕竟sed的功能实在太强了。
单一文件重命名就太简单了,mv一下就全来了。批量怎么办?
OK,一句话:
XML/HTML代码
- for i in `ls`; do mv -f $i `echo $i | sed 's/????/?????/'`; done
看到没。其实就是一个for in,然后 mv 一下。只是mv的蚨,用sed进行了改名,用上了管道,echo 等。
接着来:
1、改文件的首字母为a:
如果是前两个字母,就是^..
- for i in `ls`; do mv -f $i `echo $i | sed 's/^./a/'`; done
2、改文件的末字母为a
如果是后几个字母就是..$
- for i in `ls`; do mv -f $i `echo $i | sed 's/.$/a/'`; done
3、文件名加前缀:
XML/HTML代码
- for i in `ls`; do mv -f $i `echo "prefix_"$i`; done
4、文件名小写变大写
XML/HTML代码
- for i in `ls`; do mv -f $i `echo $i | tr a-z A-Z`; done
顾名思议,大写变小写就是将A-Z和a-z换一个位置
5、改指定字符为其他(如后缀名)
XML/HTML代码
- for i in `ls`; do mv -f $i `echo $i | sed 's/.html/.php/'`; done
更多技巧,请参考sed的用法
标题是标题,但其实讲的内容当然是不一定只是在树梅的设备上用的。不要太纠结于表面,我不改标题是为了尊重原作者
原文来自于hugo zhu的网站:http://hugozhu.myalert.info/2013/03/08/block_failed_ssh_attempts_with_iptable.html,看了他的名字,你也可以猜出他的微博定就是http://weibo.com/hugozhu。OK,不扯蛋,上原文:
Raspberry Pi整天开着,如果用缺省SSH端口对外开放,就会经常遇到扫描SSH密码的肉鸡。虽然密码不是很简单,但还是感觉很不安全的。
系统的ssh登录日志文件在:/var/log/auth.log,登录失败时会记录以下格式的日志:
Mar 7 10:31:51 raspberrypi sshd[24510]: Failed password for root from 221.8.19.129 port 4066 ssh2Mar 7 10:31:55 raspberrypi sshd[24514]: Failed password for root from 221.8.19.129 port 4079 ssh2Mar 7 10:31:56 raspberrypi sshd[24518]: Failed password for sshd from 221.8.19.129 port 4080 ssh2Mar 7 10:32:26 raspberrypi sshd[24522]: Failed password for sshd from 221.8.19.129 port 4149 ssh2
用最简单的Shell脚本来解决这个问题:
guard.sh
#!/bin/bash-
last_ip=""tail -f /var/log/auth | while read LINE; do{ if [[ "${LINE}" =~ "Failed" ]]; then ip="$(echo ${LINE} | awk '{print $(NF-3)}')" if [[ "$last_ip" == "$ip" ]]; then echo "block $ip" #curl -s --data-ascii "uuid=<my iphone's uuid>" --data "body=${LINE}" http://raspberrypi/pushme iptables -A INPUT -s "$ip" -j DROP fi last_ip=$ip echo $LINE fi}done
用root用户执行以下命令,也可以放到启动脚本里:/etc/rc.local
nohup /root/bin/guard.sh > /var/logs/guard.log 2>&1 &
如果连续两次输错密码,那ip就会被封,我另外加了一个报警,会通知到我的手机,这下感觉安全了些。
登录Pi用iptables -L可以看到被封杀的IP列表,如果需要解封这些IP,可以用命令iptables -F,也可以用crontjob每天定时运行一次iptables -F来清除
脚本还很简单,还可以有不少改进,可以在评论里讨论。
---EOF---
越来越发现,sablog需要改版了。再不改。alexa排名下降不说,最关键的是,代码的显示不爽了。只是想到改版后有几千篇的文字需要一一调整就痛苦。