分类目录归档:Linux

转移了服务器文件

在diahosting的vps快到期了。感觉不是很满意,于是去rashost注册了一个。咨询了一下,客服推荐了硅谷数据中心的主机,稳定性比洛杉矶的好很多。我也觉得,洛杉矶机房已经悲剧了2次了,不敢再用,虽然速度还可以。

 

这是硅谷的网络:

C:\Users\Xiaoxia>ping home.xwsm.net

正在 Ping home.xwsm.net [74.82.169.103] 具有 32 字节的数据:
来自 74.82.169.103 的回复: 字节=32 时间=286ms TTL=43
来自 74.82.169.103 的回复: 字节=32 时间=303ms TTL=43
来自 74.82.169.103 的回复: 字节=32 时间=286ms TTL=43
来自 74.82.169.103 的回复: 字节=32 时间=402ms TTL=43
74.82.169.103 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 286ms,最长 = 402ms,平均 = 319ms
 
 
不是很稳定,时快时慢。原来洛杉矶的速度好一点:
C:\Users\Xiaoxia>ping home.xxsyzx.com
正在 Ping home.xxsyzx.com [96.44.137.98] 具有 32 字节的数据:
来自 96.44.137.98 的回复: 字节=32 时间=284ms TTL=45
来自 96.44.137.98 的回复: 字节=32 时间=280ms TTL=45
来自 96.44.137.98 的回复: 字节=32 时间=279ms TTL=45
来自 96.44.137.98 的回复: 字节=32 时间=291ms TTL=45
96.44.137.98 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 279ms,最长 = 291ms,平均 = 283ms
 
 
傍晚花了1小时把数据转移到新主机上了。转移时5MB/s,700多M的东西,不用几分钟就完成了。
 
考虑到一些域名还是解析到原来的IP,所以原来的服务器上还是运行着homeserver,不过使用了反向链接,指向新位置。
 

        <virtualHost name="*">
                <proxy>
                        <serverAddress>74.82.169.103</serverAddress>
                        <serverPort>80</serverPort>
                </proxy>
        </virtualHost>
 

Linux受限用户的建立

 

想要给予用户什么功能,把命令copy到主目录的bin下。所有者最好为root,hia hia ~~

或者把主目录也改成root所有的,这样这个用户只能用来执行某些程序!用途嘛,太多了,你知道的。

 

附文本:

#!/bin/bash
username="dear"

cp -a /bin/bash /bin/rbash
useradd -c "A Restricted User" -g users -d /home/$username -s /bin/rbash $username
rm -rf /home/$username;  mkdir -m 555 /home/$username
mkdir -m 555 /home/$username/bin
cp -a /bin/ls /home/$username/bin
cp -a /usr/bin/passwd /home/$username/bin
echo "export PATH=/home/$username/bin" > /home/$username/.bash_profile
chmod 444 /home/$username/.bash_profile
passwd $username

Cygwin学习笔记

为了在最短的时间内掌握Cygwin原理,我选择了MSYS的源代码来进行分析研究。

以下内容仅为阅读代码时做的笔记,非文献。

 

当一个Cygwin程序运行时,首先到达mainCRTStartup ()这个入口函数,属于newlib,在newlib的crt0.c里。

mainCRTStartup ()调用msys_crt0或者cygwin_crt0,并传递main函数的地址。

msys_crt0调用了_msys_crt0_common 和 dll_crt0__FP11per_process。

在_msys_crt0_common()里,主要给per_process结构分配空间,然后初始化结构的数据内容。

进入dll_crt0__FP11per_process()后,就不会再返回了。

接着来到_dll_crt0(),获取环境变量和进程信息,通过set_console_handler设置终端IO文件。随后调用dll_crt0_1()

在dll_crt0_1里,设置了异常处理函数,初始化resourcelocks和threadinterface,似乎给线程都分配了名字。

调用了host_dependent.init (),不知道干了什么。

调用memory_init(),若是第一次加载dll,会创建一片共享内存区域。

调用events_init()初始化。

如果是使用fork创建的子进程,则跳到指定的地址去执行。否则,执行下面初始化:

Cygwin进程列表初始化,dtable初始化,信号处理初始化,tty初始化。

对命令行参数的路径进行转换。

 调用stdio_init()设置标准的输出输入描述符表。

至此,基本上完成了Cygwin的数据初始化。

 

最后调用dlls.init (),调用各个premain函数。调整到user_data->main去执行。

 

至此,我大致已经清楚了Cygwin的启动流程,可以去尝试自己写一个运行库了 :D

 

经过一晚奋战,结果如下,成功执行MSYS的env.exe程序。

 

Cygwin Makes Me Crazy?

前几天在忙着编写kernel32.dll以支持msys-1.0.dll。后来发现有点问题了。

首先,要实现的函数数量比较多,起码有100个以上。其次,我对win api不熟悉,也不感冒,对于每个api都要去msdn获取资料,相当麻烦。另外,某些api是非常难实现,例如编码转换,acl那些。

 

因此,我从昨天开始停止了继续编写kernel32了,而是转向msys-1.0.dll。msys和Cygwin是差不多的,其实就是一个简化版的Cygwin。而且使用了newlib,可移植性很好。

在编写msys的时候,又遇到问题了,我发现了里面有很多Cygwin的专用结构。对于这些结构我还不是很了解,所以基本上都没有实现。同时,我对Cygwin的工作流程也不是怎么熟悉。

 

为了让原计划继续进行,无论如何我也要把msys运行库写出来。

下一步先熟悉一下msys的源代码!!

php-cgi莫名其妙的崩溃

homeserver通过FastCGI协议与php-cgi进程进行通信来执行php脚本文件。
一直以来都发现php-cgi进程不是很稳定,可能是我在实现协议上有不当的地方。运行一段时间后,例如一两天,phpcgi进程就会自动结束,也不留下任何相关信息。
目前,我通过写批处理文件,在进程结束后自动建立新进程来临时解决这个问题。之前在windows上是写一个批处理文件,然后copy几万行执行命令,这样就相当于无止境地执行。
在Linux上做的更简单,可能是我不知道在windows的批处理里怎么写循环。

#!/bin/bash
while true
    echo “Starting php server …”
    php-cgi -b 127.0.0.1:8080
    echo “Server exited. Restart it …t”
    sleep 10s
done

为啥要sleep 10s呢?因为php-cgi进程异常结束了,socket还在占用着8080端口,如果不睡眠一下,那么会耗尽CPU资源,知道端口能够使用。这样可能导致日志文件的体积疯狂增长,直到硬盘资源枯竭而止。。。