EC2 Instance 重启后ssh无法登陆的问题

创建instance后,第一次都能正常运行,但是重启后大概率(大于80%)创建的instance就ssh连不上了。刚开始以为自己的业务导致服务器僵死,后来发现80端口都是正常的,说明服务器没有问题,只是ssh无法连接。
于是通过其他手段登录到服务器,想手动拉起sshd,系统提示:

Failed to start SSH server :
Starting sshd: /etc/ssh/sshd_config line 157: Bad yes/without-password/forced-commands-only/no argument: without-passwordUseDNS
[FAILED]

根据提示,发现sshd_config的配置中有非法的内容(没有换行),于是手动,修改后sshd正常启动。
进一步定位分析,发现原来 EC2的 instance 的/etc/rc.d/rc.local 中有脚本控制每次开机后向sshd_config 末尾写入:

UseDNS no
PermitRootLogin without-password

当这2行缺少合法的换行时,sshd就开机无法启动了。
解决方法:
1)屏蔽rc.local脚本的相关语句
2)修改sshd_config的属性为只读

EC2 snapshot 默认创建instance无法启动问题

用创建的snapshot创建的 instance 一直显示 initialization,查看log:
EXT3-fs: sda1: couldn't mount because of unsupported optional features (240).
EXT2-fs: sda1: couldn't mount because of unsupported optional features (240).
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(8,1)
初步分析,创建都是default 的,恢复也是default的,应该没有问题才对,但看日志,是文件系统不支持,说明内核版本有问题了。于是在恢复时手动选择AKI:
aki-68c06a69 aki-config 注意:此AKI要根据自己的系统以及版本选择合适的,我选择的只针对我自己的系统。
重新选择后,创建多个实例,都启动ok

有源滤波电路的等价无源滤波电路

目前的filterlab filterpro等元件生成的参考模型都是基于有源运放的。如果我们需要无源的等价电路,一个简单的近似等价方法:

先根据自己需要用软件设计出有源滤波器电路,然后将生成的滤波电路中的运放去掉,将RC网络中原来接运放输出端的那个回路点直接改接到地。

MTK编译环境问题make: *** [mmi_feature_check] Error 1

今天遇到的问题:同样都是win7 系统,同样的安装路径,编译工具和代码,在新的机器上就是编译不了,提示如下:

make: *** [mmi_feature_check] Error 1

熟悉mtk的同学一看就知道是路径问题.

于是在相关perl脚本中分段加打印,终于定位出原来是新的机器不支持命令行的空格缩写格式,不支持如  c:Progra~1 这样的写法.

具体原因待日后有时间再进一步定位.暂时通过修改工具路径规避此问题.

mysql table crash 自动修复脚本

已验证:eg1:

#!/bin/sh

cd /var/lib/mysql

echo "$(date) start mysql_deamon running..."
sleep 180

while [ 1 ]
do
echo "$(date) mysql_deamon running..."
sleep 30

for i in `cat mysqld.log |grep crash|awk -F "'" '{print $2}'|sort -u|sed -e '1d' `;
do
if [ "$i" != "./xxx/xxx" ]; then
echo 'not find xxx crash'
else
echo 'find xxx crash'
echo 'repair xxx'
mysqlcheck -uxxx -pxxx xxx xxx -r
fi

echo 'clear the err log'
> mysqld.log
done
done

eg1 中红色部分代码其实可以1句搞定,由于本人不善 shell 提取字符操作,只能做固定判断了

未验证 eg2:

#!/bin/bash

#This script edit by badboy connect leezhenhua17@163.com
#This script used by repair tables
mysql_host=localhost
mysql_user=root
mysql_pass=123456   #密码如果带特殊字符如分号可以这么写  root;2010就可以了
database=test

tables=$(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse “show tables”)
for arg in $tables
do
check_status=$(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse “check table $arg” | awk ‘{ print $4 }’)
if [ "$check_status" = "OK" ]
then
echo “$arg is ok”
else
echo $(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse “repair table $arg”)

fi
echo $(mysql -h$mysql_host -u$mysql_user -p$mysql_pass $database -A -Bse “optimize table $arg”)
done

未验证 eg3:

#!/bin/bash
#author:itnihao
#mail:itnihao@qq.com
#date 2013-02-18
#version v1.0
#function:repair mysql table

User=root
Password=123456
Host=192.168.1.10
Database=$(mysql -u${User} -p${Password} -h${Host} -e 'show databases'|grep -v 'Database')
for DBname in ${Database}
do
table=$(mysql -u${User} -p${Password} -h${Host} ${DBname} -e 'show tables'|grep -v tables_in_mysql)
for tableName in ${table}
do
mysql -u${User} -p${Password} -h${Host} ${DBname} -e "check table ${tableName}" [ "$?" != 0 ] &&mysql -u${User} -p${Password} -h${Host} ${DBname} -e "repair table ${tableName}"
done
done

mysql:’xxx’is marked as crashed and should be repaired

1、从网上查了下有的说是频繁查询和更表造成的索引错误。

2.还有说法为是MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都 有可能导致MYSQL数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。

修复:

mysql> REPAIR TABLE int_dev_gps;

服务器shell脚本中用wget/curl模拟客户端调用api接口

目前的生产环境使用的vps的shell监护脚本中,发现有很大的概率reboot命令会僵死,但是web页面面板功能正常。正好网站提供了api接口,所以可以通过api完成可靠的系统复位。

我们可以在shell中用wget 和curl 模拟客户端,来发送指令的url.

curl 常用的 开关:

-o 忽略下载

-s 忽略返回

其他的见 --help

样例:

curl -o /dev/null -s "http://xxxx.com"