首先,家里的书架终于腾出空间,可以再买些来囤了哈;其次,换了纯 SSD 的 iMac 27 寸今天到;最后,运行将近 5 年的平台终于搬迁至阿里云,如释重负!
平台之所以决定选择阿里云,是不想再承担服务器软硬件故障的风险了,近半年来平台断网的次数确实很多,软件硬件因素都有,至于迟迟没转到阿里云,一是数据量太大,数据迁移是个问题,二是客户多线路互联互通的问题,在身处异地又再次出现服务器故障的那刻起,毅然决定,刻不容缓的将平台移至阿里云!
将亿级别、压缩后将近90G的数据库备份做公网迁移确实从来没尝试过,在协调好出入网带宽都调升后,传输完成依然花费了将近8个钟,在不超过9个小时的维护时间内完成各服务的迁移是肯定不够的,备份还原就花费将近2个小时,这次迁移在最后由于数据版本的不一致没能一次性完成数据恢复,只能第二晚做个差异备份,完美还原。今天第一天运行,各指标无出现异常,心里的石头暂时得以放下!后面的路依然任重道远。
哦对了还有,快四个月没跑步了,可以重新开跑了哈!
]]>之前刷好过一个,今天同事拿去用了。又得刷一次,刷机方法网上很多,这里仅记录自己亲测的一个方法(不适合小白)。
刷之前要先确定当前机子固件的版本,有的版本不能直接进入Breed(是什么鬼目前还没搞懂),要经过降级才可以。
我手头就有两个不一样版本的机子,刷的方法也不一样,其中一个22.4.5.42可以直接降至22.4.2.9然后进入Breed;而22.4.6.3则降不了!网上有介绍通过修改页面HTML直刷Breed,但亲测失败,最后发现当前最新版本为22.5.9.163,网上有介绍这个可以降至22.4.2.8,亲测成功,流程如下:
0、首先去官网下载最新版22.5.9.163,然后手动更新该固件。
1、下载一个定制版固件(k2_163_v11_breed.bin)和老版本的官方固件(22.4.2.8,SW_K2_703004657_V22.4.2.8.bin)。
2、进入路由手动升级(实为降级)至定制版固件。
3、按住复位键,插上电源,按住等待7秒钟,浏览上输入:192.168.1.1,进入Breed Web设置页面,在Breed“环境变量设置”中改为“禁用”。
4、点击“固件更新”里刷回老版本的官方固件。
接下来就是刷入Breed了,这里用网友tianbaoha原创的恢复配置文件(tianbaoha_breed_ssh.dat)方法:
1、进入路由器后台,点击:高级设置 -> 系统设置 -> 备份恢复,完成恢复。
2、重启后,使用新的密码“tianbaoha”登录。
3、先拔掉电源,在断电状态下,按住路由器后面的重置按钮不放,插上电源,持续按住10秒左右,再松开按钮,等待1分钟。
如果顺利,这时访问192.168.1.1就能进入到Breed Web控制台界面了。只要成功进入Breed Web恢复控制台,就可以刷各种固件了。
这时,我有一个疑问,为啥既然在降至定制版固件后可以进入Breed了,怎么不直接就刷Padavan固件呢!?(各种设备已收拾完毕,下次再试吧哈哈。)
4、点击「恢复固件」-> 固件 -> 浏览,选中下载好的Padavan固件,比如我是「RT-AC54U-GPIO-1-PSG1218-64M_3.4.3.9-099.trx」,点击「上传」即可。
首先要进入路由的Breed模式(相当于安全模式吧),新版本的已经关闭这个模式了,需恢复大神们做好的配置文件,方能进入Breed模式。而这个文件也是有版本要求的,22.4.2.9或以下(不一定准确)就可以了,所以新版本的需求先降级,只要成功进入Breed模式,就可以刷各种固件了。
http://pan.baidu.com/s/1eSmrPFs 密码: br92
Padavan开源网站
rt-n56u 中文站点
斐讯 K2 最简单刷 breed 与第三方固件教程
刷机之斐讯路由器K2尝试华硕Padavan固件
改华硕[N14U N54U]5G 2G的7620老毛子Padavan固件
$ rpm -ql subversion
$ yum info subversion
$ ps aux|grep svnserve
root 5167 0.0 0.2 166788 1024 ? Ss 00:04 0:00 svnserve -d -r /var/svn/repos
pcvc 5258 0.0 0.1 112656 976 pts/0 S+ 00:39 0:00 grep --color=auto svnserve
$ cd /var/svn/repos
$ mkdir newrepos
$ svnadmin create .
也可以直接 $ svnadmin create /var/svn/repos/newrepos
$ vi svnserve.conf
一般设置以下三个配置即可,none 表示无权限,read 表示只读,write 可读写
anon-access = none # 未登录的不可读写
auth-access = write # 已登录的可读写
password-db = passwd # 指定账号文件
添加登录名和密码,格式为 登录名 = 密码
,一行一个账号
$ svn co svn://192.168.0.21/test
co 子命令后面的 PATH 结尾如果为目录名时将自动创建目录。输入本地登录名的密码,然后再输入 svn 的登录名和密码。
$ svn co svn://192.168.0.21/test
Authentication realm: <svn://192.168.0.21:3690> d0d9bfe0-1936-4cc6-9591-db97a5aed664
Password for 'pcvc':
Authentication realm: <svn://192.168.0.21:3690> d0d9bfe0-1936-4cc6-9591-db97a5aed664
Username: test
Password for 'test':
Checked out revision 0.
默认情况下第一次输入账号名和密码后就记住,如果不想记住可用相应参数控制。
$ svn help
$ svn help <subcommand>
]]>正如 Django 官方文档所说的,静态文件,像图片、CSS、JS 等都应该交由专门的服务器(如nginx)来处理,Django 只负责动态逻辑的处理。但在开发阶段也是要使用静态文件来调试页面,为此 Django 提供了一些工具来处理静态文件,作为开发阶段的临时解决方案。所以 Django 对静态文件的处理要分开发环境和生产环境两种情况来说明。
Django 提供了 django.contrib.staticfiles
应用来处理静态文件,默认情况下在创建完项目后在 settings.py
里的 INSTALLED_APPS
配置项已包含了这个应用,同时设置了 STATIC_URL = '/static/'
这个配置,启用 staticfiles 应用后必须配置 STATIC_URL,那这配置是什么作用呢?
一般情况下,网页的静态文件是以如 <img src="http://pcvc.net/static/images/a.jpg" />
的形式去引用。在 settings.py
里,当 DEBUG = True
时,Django 就利用 staticfiles
处理静态文件,假如 STATIC_URL 设置为 /static/
,当收到URL为 /static/
前缀开头的请求时,将首先通过 STATICFILES_FINDERS 设置的寻找方式去查找,STATICFILES_FINDERS 默认值为:
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
第一种方式是 FileSystemFinder,文件系统查找方式,将按 STATICFILES_DIRS 的配置去查找,STATICFILES_DIRS 的默认值为[],STATICFILES_DIRS 的配置值要为绝对路径,如 STATICFILES_DIRS = ['/var/web/pcvc.net/static']
,根据需要可直接在 settings.py
文件添加这个配置项。
第二种方式是 AppDirectoriesFinder,应用目录查找方式,也就是在每个应用下的 static 目录下查找,static 这个名称是固定的。
Django 会按照 STATICFILES_FINDERS 配置的顺序去查找,一旦找到资源就直接返回,不会再查找,所以如果存在多个应用且名字相同的资源文件要注意路径名称的问题。
Django 静态文件的查找基本上就是这样,还有另外一种是存储引擎方式,没有深入研究,不做介绍。
这时候就可以在模板文件里引用静态文件了,如 <img src="http://pcvc.net/static/images/a.jpg" />
,当然,在 HTML 里直接用这种硬 URL 未免有点粗暴,一旦碰到文件目录发生改变,所有这样引用的模板文件都要改动到。官方推荐的是使用模板标签 static,如下:
其它方法可以查阅以下参考部分,这里就不再记录了。
生产环境下主要是将静态资源统一收集到固定的路径,然后在 Web 服务器配置访问这个路径去访问所有静态资源,这时 Django 只是使用 collectstatic 将所有静态文件复制到 STATIC_ROOT 指定的绝对路径。
如 STATIC_ROOT = '/var/web/pcvc.net/collected_static'
,执行以下命令:
# python manage.py collectstatic
修改 nginx 网站的配置:
location /static {
alias /var/web/pcvc.net/collected_static;
}
Django对静态文件的处理——部署阶段
理解 django.contrib.staticfiles
Django中对静态文件的支持
Django中静态文件设置方法
Django处理静态文件方法
CentOS-7.0-1406-x86_64-Minimal
0、安装完成后检查一下经常使用的工具是否有安装,如:wget、ifconfig、unzip、tree等等。
配置yum源,大家说用163.com的,但 yum info nginx
依然找不到,后来用了阿里云的就可以了。
1、安装wget
# yum install wget
2、安装ifconfig
# yum install net-tools
3、通过yum安装nginx,参考:CentOS 7 YUM 安装 Nginx
关闭防火墙或添加80端口,这时就可以网页了。
4、安装pip
# wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
# python get-pip.py
5、安装uwsgi和uwsgi-plugin-python插件
# yum install uwsgi uwsgi-plugin-python
6、安装django
pip install Django==1.9.1
7、测试uwsgi
# uwsgi -s 127.0.0.1:9090 --plugin python --wsgi-file /web/index.py
8、配置nginx.conf,以下为server配置节
server {
listen 80;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9090;
}
}
9、以ini配置文件方式启动uwsgi,uwsgi myweb_uwsgi.ini
,ini文件内容:
[uwsgi]
chdir = /usr/share/nginx/html
module = myweb.wsgi
plugin = python
socket = 127.0.0.1:9090
daemonize = /usr/share/nginx/html/uwsgi.log
chmod-socket = 666 # 将socket文件的权限设为666
下午搞了好久都无法访问,后来通过查看nginx日志,才知道是权限问题,由于没有加chmod-socket,nginx无权限读取socket文件,这时通过关闭SELINUX 也可以解决,具体详细情况待以后慢慢再研究吧。(后来发现加了chmod-socket没用,一定要关闭SELINUX才可以)
10、使用Supervisor配置开机自动启动uwsgi服务:
Supervisor是由python语言编写、基于Linux操作系统的一款服务器管理工具,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。通过yum安装后各配置文件和目录都自动创建好了(通过pip安装的好像没有自动生成,也不能利用systemctl启动服务),只需要在 /etc/supervisord.d/
创建启动uwsgi的ini配置文件即可:
[program:myweb_uwsgi]
command=uwsgi /var/html/pcvc.net/myweb_uwsgi.ini
stopsignal=QUIT
autostart=true
autorestart=true
stdout_logfile=/var/html/pcvc.net/supervisor.log
redirect_stderr=true
Supervisor参考:
Supervisor官方配置说明
使用Supervisor简化进程管理工作
Supervisor的安装与使用入门
按需讲解之Supervisor
到此,在 CentOS 7 基于 nginx uwsg django 搭建的 web 服务器基本可以访问了。
]]>OS X EI Capitan 10.11.3
本来很简单的一件事,却因强迫症不肯放过任何 error 而折腾了半天。方法是在 /Library/LaunchDaemons/
目录下创建一个 .plist
配置文件,然后运行 sudo launchctl load /Library/LaunchDaemons/nginx.plist
就 OK 了,完成之后各种访问都 OK,但 error.log
文件却出现大量以下错误:
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (48: Address already in use)
nginx: [emerg] still could not bind()
而且这错误是不断累积的,很明显告诉你 80 端口已被占用,经查并没有其它程序占用此端口,而是 nginx
自己占用了,但为何会出现这错误,至今也搞不明白。后来搜索到 nginx 官网有个配置文件,就按官网重新放置了 .plist
文件,这次居然不报错了。以下是配置文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>nginx</string>
<key>Program</key><string>/usr/local/bin/nginx</string>
<key>KeepAlive</key><true/>
<key>NetworkState</key><true/>
<key>WorkingDirectory</key><string>/usr/local/etc/nginx</string>
<key>StandardErrorPath</key><string>/usr/local/etc/nginx/logs/error.log</string>
<key>StandardOutPath</key><string>/usr/local/etc/nginx/logs/access.log</string>
<key>LaunchOnlyOnce</key><true/>
</dict>
</plist>
还有 nginx.conf
文件里的这句配置 listen 80 default_server;
,出错时我是没加 default_server
的,后来和修改配置文件时一起加上的,不知会不会是这个原因,已无心验证。
nginx error_log reports “bind() to 0.0.0.0:80 failed (48: Address already in use)”
nginx官网:OSX Launchd
Mac OSX的开机启动配置
Launchd in MacOS
SSH为Secure Shell的缩写,SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。Linux一般自带的是OpenSSH,可以用 ssh -V
查看当前版本。
[root@localhost ~]# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013
用SSH登录到远程主机,有两种认证方式,一种是基于口令的安全验证,另一种是基于密匙的安全验证。可以通过修改 /etc/ssh/sshd_config
这个文件对ssh服务的一些行为进行配置。
当第一次使用SSH登录远程主机时,会出现没有找到主机密钥的提示信息。输入"yes"后,系统会将远程主机的密钥加入到你的主目录下的 .ssh/known_hosts
文件里(我用的是Mac OS X),这样你就可以继续操作了。因为远程主机的密钥已经加入到ssh客户端的已知主机列表中,当你第二次登陆远程主机时,只需要你输入远程主机的登录密码即可。如果远程主机的密钥发生改变,将会看到一些警告信息。在输入“yes”之前呢,最佳的选择或许是联系系统管理员来分析为什么会出现主机验证码改变的信息,核对主机验证码是否正确。
由于平时经常要连到远程服务器进行维护,每次都要输入密码也是挺烦的,下面介绍如何开启基于密匙的安全验证登录远程主机。需求是:保留基于口令的安全验证登录,同时禁止root登录ssh,只能用普通用户登录。
首先,先创建一个普通用户pcvc:
[root@localhost ~]# useradd -r -m -d /home/pcvc -s /bin/bash pcvc
[root@localhost ~]# passwd pcvc
[root@localhost ~]# 输入pcvc的密码
用 ssh-keygen
生成密钥对:
[pcvc@localhost ~]$ ssh-keygen -t rsa
可以根据提示按自己需求填写相关值,也可按默认一路按回车键。默认情况下会在 ~/.ssh
目录下生成两个文件:
[pcvc@localhost ~]$ ll .ssh
总用量 8
-rw-------. 1 pcvc pcvc 1679 8月 10 22:58 id_rsa
-rw-r--r--. 1 pcvc pcvc 409 8月 10 22:58 id_rsa.pub
id_rsa
是私钥,id_rsa.pub
是公钥。注意生成的私钥文件的默认权限是rw——-,即600(确保他人不能查看)。要将 id_rsa.pub
的内容添加到远程主机的用户主目录下的 .ssh/authorized_keys
文件里,该文件一行一个公钥。
接下来根据上面的需求修改ssh的配置文件 /etc/ssh/sshd_config
1 2 3 |
|
修改一下相关目录、文件的权限
[root@localhost ~]# chmod 700 /home/pcvc
[root@localhost ~]# chmod 700 /home/pcvc/.ssh
[root@localhost ~]# chmod 400 /home/pcvc/.ssh/authorized_keys
systemctl restart sshd.service
重启ssh服务,这时就可以在客户端通过 ssh pcvc@192.168.0.117
登录远程主机了。
简单使用ssh密钥认证
CentOS 6.2 构建SSH 密钥对验证登录
ssh使用公钥授权不通过的问题解决
CenOS6.3 ssh 公钥认证报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).解决
在安装前查看是否已安装vsftpd
[root@localhost ~]# rpm -q vsftpd
vsftpd-3.0.2-9.el7.x86_64
如果有显示类似以上的信息,说明已经安装vsftpd,如果没有,用yum安装:
[root@localhost ~]# yum -y install vsftpd
查看一下vsftpd安装在哪:
[root@localhost ~]# whereis vsftpd
vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz
启动vsftpd服务:
[root@localhost ~]# systemctl start vsftpd.service
对于从未使用过vsftpd的Linux菜鸟来说,在配置之前,简单了解一下vsftpd服务的过程相当有必要的。安装完默认情况下是开启匿名登录的,对应的是 /var/ftp
目录,这时只要服务启动了,就可以直接连上FTP了。
pcvcdeiMac:~ pcvc$ ftp 192.168.0.117
Connected to 192.168.0.117.
220 (vsFTPd 3.0.2)
Name (192.168.0.117:pcvc): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||37296|).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 6 Jun 10 2014 pub
226 Directory send OK.
然而,一般情况下我们都是按分配的用户去访问各自的目录,vsftpd的用户分为系统用户和虚拟用户,系统用户也就是系统实际存在的Linux用户,而虚拟用户则是存在于配置文件里面的。系统用户方式比较简单,创建系统用户,确保用户能对FTP目录进行读写就可以了。以下是创建普通Linux用户,详见 useradd
命令。其实,从以上连接ftp信息可以看出,有的系统已默认创建了名为ftp的用户了。
[root@localhost ~]# useradd -g root -M -d /var/www/html -s /sbin/nologin ftpuser
[root@localhost ~]# passwd ftpuser
[root@localhost ~]# 输入密码
把 /var/www/html
的所有权给ftpuser.root
[root@localhost ~]# chown -R ftpuser.root /var/www/html
这样就可以通过ftpuser用户连接FTP了。至于虚拟用户需要做的步骤就比较多了。首先虚拟用户的用户认证是通过pam方式去认证的,pam文件里面指定了认证的db文件,db文件又是通过明文用户名和密码文件生成而来,为何要这么绕我也不大清楚。那么首先我们要指定pam文件,这个在 /etc/vsftpd/vsftpd.conf
配置文件是通过 pam_service_name=vsftpd
配置指定的,其位置是 /etc/pam.d/vsftpd
,编辑该文件,把文件内容全部注释掉,加上以下两行:
64位系统:
1 2 |
|
32位系统:
1 2 |
|
db=/etc/vsftpd/vuser_passwd
指定了db文件的位置,接下来就是生成db文件,由于db文件是通过明文用户名和密码文件生成而来,所以先创建一个保存明文用户名和密码的文件 vuser_passwd.txt
[root@localhost ~]# vi /etc/vsftpd/vuser_passwd.txt
该文件奇行为用户名,偶行为密码:
1 2 |
|
然后通过以下命令生成db文件:
[root@localhost ~]# cd /etc/vsftpd
[root@localhost vsftpd]# db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db
至此用户的认证就知道怎么一回事了,如果要添加新的用户,在编辑 vuser_passwd.txt
后要再次生成一下db文件。然后现在每个用户的具体配置,如指向目录、可读写权限等又是在哪配置的呢,原来它是通过一个用户对应一个配置文件来实现的,且这个文件必须用FTP用户名去做文件名,建一个目录专门存放这些文件:
[root@localhost vsftpd]# mkdir vuser_conf
[root@localhost vsftpd]# vi vuser_conf/pcvc
文件内容大致如下:
1 2 3 4 5 6 7 |
|
接下来就是根据需要和以上各文件信息来修改配置文件 /etc/vsftpd/vsftpd.conf
了,启用或更改以下配置的值:
1 2 3 4 |
|
以下配置是需要自己手工添加:
1 2 3 4 |
|
用 systemctl restart vsftpd.service
重新启动服务即可用虚拟用户登录FTP了。
如果系统启用了防火墙和SELinux,那么还要做以下配置。
防火墙添加FTP服务:
[root@localhost vsftpd]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@localhost vsftpd]# firewall-cmd --reload
设置SELinux:
[root@localhost vsftpd]# getsebool -a | grep ftp
[root@localhost vsftpd]# setsebool -P ftpd_full_access on
1. 编辑 vuser_passwd.txt
文件,添加用户名和密码:
# cd /etc/vsftpd
# vi vuser_passwd.txt
new_ftp_user
new_ftp_user_password
2. 重新生成 vuser_passwd.db
文件:
# db_load -T -t hash -f vuser_passwd.txt vuser_passwd.db
3. 创建用户配置文件:
# cd vuser_conf
# vi new_ftp_user
配置文件内容:
local_root=/new/ftp/directory
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
3. 重启服务:
# systemctl restart vsftpd.service
vsftpd虚拟用户账号的配置步骤
Vsftpd虚拟用户的配置
CentOS–FTP安装与配置
linux系统中配置vsftpd及用户权限
CentOS 7.0快速搭建HTTP服务器和仅供授权用户登陆的FTP服务器
未开始…
]]>关闭防火墙:systemctl stop firewalld.service
解压 .tar.gz 文件:tar -zxvf web.tar.gz
,tar 不支付解压文件到指定的目录。
解压 .war .zip 文件到指定目录:unzip web.war -d webapps/
关闭 SELINUX:vi /etc/selinux/config
,注释掉 SELINUX=enforcing
和 SELINUXTYPE=targeted
,添加 SELINUX=disabled
,:wq!
保存退出,setenforce 0
使配置立即生效。
查看某服务状态:systemctl status uwsgi.service
更改文件或目录的所有者:chown pcvc:pcvc /the/full/path/or/file
systemctl 的常规用法:systemctl 动作 服务名.service
,动作有:start启动, stop停止, restart重启, status状态, enable开机启动, disable开机不启动, is-enabled, is-active
列出所有运行中的服务:systemctl list-units --type=service
,systemctl list-unit-files
由于我用的是Mac,MS的工作环境是在Parallels Desktop虚拟机完成,所以Linux也是在虚拟机下玩。可以在网易开源镜像站下载所需的Linux版本进行安装,我选择的是 CentOS-7-x86_64-Minimal-1503-01.iso
,也就是最小安装,没有图形界面,很多软件包也要自己去安装。默认情况下,系统的安装过程很简单,刚接触的新手只需要选择安装在哪个磁盘和设置root密码即可,若有需要还可以自己定义分区和配置网络设置。
这次为了重新搭建这个博客和搭建 jquery.cn
网站,购买了阿里云服务器,发现他们Linux系统其实不是纯的最小安装,一些服务器常用软件包默认已经安装好了,yum源也是用阿里云的,一些系统服务也有做改变,如防火墙firewalld和SELinux都关闭了的。
安装完成后,第一件事就是登录系统,配置可以连网,默认安装完网卡是没随系统启动而开启的,可以修改 /etc/sysconfig/network-scripts/ifcfg-eth0
这个网卡配置文件,将最后一行 ONBOOT=no
改为 ONBOOT=yes
即可。接下来通过rpm查看一下系统有没安装wget,因为下面会用到,关于wget可以参考Linux: wget 使用技巧。
[root@localhost ~]# rpm -q wget
wget-1.14-10.el7_0.1.x86_64
关于rpm可以参考CentOS/使用RPM管理包,如果没有出现上面的结果,表示没有安装wget,下面通过yum安装一下。
[root@localhost ~]# yum install wget
安装软件一般是通过yum命令直接从网上下载后直接安装,所以要先配置好软件源,默认是采用CentOS官方的yum源,国内访问相对比较慢且有时连不上,所以修改为国内的,我选择的是网易开源镜像站,yum源配置文件存放在 /etc/yum.repos.d/
目录下,先备份一下默认的配置文件:
[root@localhost ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
[root@localhost ~]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo /etc/yum.repos.d/CentOS7-Base-163.repo
[root@localhost ~]# yum clean all
关于yum可以参考CentOS yum 源的配置与使用和linux yum命令详解这两篇博文。
接下来就请不厌其烦的生存在命令行的世界里吧!随后的将分篇再述……
]]>GSM Modem是一种使用移动通讯系统的调制解调器。GSM Modem就像一部手机一样通过SIM卡注册到运营商,当GSM Modem连接到电脑上的时候,电脑可以通过它与移动网络进行通讯,用户还可以通过它来接收和发送彩信以及短信。
长短信:
0891683108200105F06005800180F60008412081611530238C050003C60301
5C0A656C76845BA26237FF0C60A8597DFF016B228FCE4F7F752875355B506E
20905377ED4FE184254E1A5385FF0C60A85F53524D4F59989D4E3A00330034
002E003300355143FF0CFF084EC54F9B53C28003FF0C5B9E96454EE551FA8D
26540E8D2653554E3A51C6FF093002598297005145503C4EA48D398BF770B9
51FB0068007400740070
普通短信:
0891683108707515F0240D91688166669883F30008412051915020230A597D50CF54586751FF01
0891683108200105F0 固定的
后面2位是“基本参数”。根据观察:24为普通短信手机回复,11为发送短信
后面2位是回复号码的个数,是实际个数而不是编码后的个数。根据观察:0D为手机回复,05为10086
后面2位是回复地址格式(TON/NPI),91为国际格式,手机回复时为91,其它为80
后面2位是协议标识(TP-PID),00是普通GSM类型,点到点方式
后面2位是用户信息编码方式(TP-DCS),00:7-bit编码,04:8-bit编码,08:USC2编码
后面14位是时间,倒序的,41207121033223 => 14-02-17 12:30:23,最后2位为时区格式+32
后面2位是内容长度,十六进制
如果是长短信,后面的12位是协议信息和分拆短信信息描述,网上有很多资料可参考。
0500基本固定
03代表分拆短信位数
C6唯一标识
03一共有多少条短信
01当前是第几条
AT
测试AT命令
AT+CMGL=4
获取SIM卡所有短信
AT+CMGF=0
设置短信编码格式
AT+CMGS=43
发送短信的长度
AT+CMGD=1,4
删除SIM所有短信
AT+CPBW=1,“15921796442”,,“MY”
写入将名称为MY的电话号码到SIM
AT+CPBF=“MY”
查找名为MY的电话号码
所有命令无结果或失败均返回ERROR,像查找SIM号码,若找不到也是返回ERROR。
http://m2msupport.net/m2msupport/module-tester/
http://www.cnblogs.com/babykick/archive/2011/03/25/1995980.html
http://blog.csdn.net/xqf222/article/details/6577068
http://blog.chinaunix.net/uid-28269896-id-3451906.html
http://blog.csdn.net/feifei17/article/details/8795002
长短信:
http://www.amobbs.com/thread-5527253-1-1.html
http://wapsoft.blog.163.com/blog/static/215540146201302312252800/
http://www.chawenti.com/articles/12443.html
http://www.cnblogs.com/Engin/archive/2010/11/25/1887925.html
由于没想往这方面发展,所以能完成自己的需求就罢了。现已用C# winform实现多线程群发手机短信、自动获取每张卡内余额、定时获取短信回复,下面是短信发送程序的截图。
]]>故障时间:17:50 2014-01-26 星期日 休息日
处于环境:无电脑、无网络、3G差,手机电量1%
故障体现:网站打不开,远程桌面连不上,PING不通,DRAC可以连。
根据系统日志,在这时间点并没发现明显的严重应用程序日志和系统日志,倒是在 2014/1/26 18:23:56 出现大量来自 ESENT 的应用程序错误,日志描述如下:
Catalog Database (856) Catalog Database: 由于系统错误 5 (0x00000005):“拒绝访问。 ”,确定包含“C:\Windows\system32\CatRoot2\”的卷“C:\”的最小 I/O 块大小的尝试失败。此操作将失败,并出现错误 -1032 (0xfffffbf8)。
还有上面的错误都附带一个来自 Microsoft-Windows-CAPI2 的应用程序错误日志:
“加密服务”服务未能初始化编录数据库。ESENT 错误为: -1032。
第一个日志,看起来是权限问题无法写入的问题,但是是什么程序需要写入呢?写入不成功会导致断网断远程?这有点不靠谱。
据查,第一个错误的原因是:由于服务器的C盘做了安全策略,然后导致补丁没有修补成功,给C盘一个 Users 组的默认的权限就可以了。
第二个错误是第一个造成的。
OS的自动升级是关闭的,打补丁从何说起?难道是安全狗,经查安全狗也没启用打补丁功能。19:34:58 再次出现 ESENT 错误日志。
综合分析,没有找出确切的原因,只能断定以下两种可能:
采取举动:
CatRoot2 产生的文件和给 Users 权限有关系的,但是否是这个原因导致这次故障还没确切证据,个人观点表示不怎么可能是。
]]>写博客就这几个命令:
rake new_post['name'] # 新建博文
rake new_page['name'] # 创建新页面(少用)
rake generate # 生成网页
rake preview # 预览
rake deploy # 发布
rake gen_deploy # 相当于生成+发布
本博客已于 2015-7-30
放到自己的阿里云服务器上了。