php调用shell脚本需要注意的问题

php调用shell脚本的svnup.php文件内容:

<?
set_time_limit(0);
//$output = array();
$ret = 0;
exec("/usr/bin/sudo /data0/shell/svnvp.sh", $output, $ret);
echo "Result:{$ret}";
print_r($output);
?>

/data0/shell/svnvp.sh是更新的脚本,主要内容是svn up。

 

还需要修改sudo配置文件,直接键如visudo命令编辑配置文件:

1. 注释Defaults requiretty
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
否则会出现sudo: sorry, you must have a tty to run sudo

2. 增加行 Defaults visiblepw
否则会出现 sudo: no tty present and no askpass program specified 

我发现sudo-1.6.9p17-5.el5是不支持这个参数的,sudo-1.7.2p1-10.el5支持。

3. 赋予www用户执行svn权限
如,增加行:www  ALL=(ALL) NOPASSWD: /data0/shell/svnvp.sh
注:NOPASSWD可以使在命令执行时不需要交互输入www 用户的密码

www用户为nginx或apache的运行用户

 

4.重启nginx或apache,让用户重新获得权限。

centos 5 增加永久静态路由

手动添加路由的方式为:

route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.25

route add -net是centos下的添加静态路由网络的方式,netmask是网络段的子网掩,gw表示下一跳的地址,其实就是指172.16.6.0此网段的路由通过172.16.2.25出去,这只是临时的效果,如果服务器重启则失败,如何能让其永久生效呢?其实可能将其写进文件中,如下:

vim /etc/sysconifg/network-scripts/route-eth0
127.16.6.0/24 via 172.16.2.25

服务器重启也不需要担心了,它会一直生效的

Centos下查看路由表的方式蛮多的,netstat -rn或route -n均可;linux下的相关资料也比较多,我这里也不作重点说明了.

用deltacopy备份,出现File name too long (91)错误

出现File name too long (91)错误是因为老版本的rsync最大只支持255个字符(包括目录和文件名),超过255个字符就会报错。

 

解决办法是用一个更新版的rsync,在windows上的rsync只有Cygwin上有了,去Cygwin官网下载setup.exe,然后安装,把所有net都选中。安装完以后把下面文件copy到Deltacopy目录。

chmod.exe
cygcrypto-0.9.8.dll
cyggcc_s-1.dll
cygiconv-2.dll
cygintl-8.dll
cygminires.dll
cygpopt-0.dll
cygwin1.dll
cygz.dll
rsync.exe
ssh.exe

copy完后还要改一个配置文件deltacd.conf:

在开头加上:

uid = 0
gid = 0

然后重启deltacopy服务就行。

上面那些文件我打了个包,可以在这下载:

 http://farmerluo.googlecode.com/files/cywin1.7.rar

 

 

Deltacopy是个不错的备份软件,比cwrsync好用

Deltacopy和cwrsync一样,都是基于大名鼎鼎的同步工具rsync。但是Deltacopy比cwrsync要多了几个管理工具,好用多了。

官方网站:http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp 

Deltacopy是开源软件,基于GPL v3,可以免费使用,无需注册。

用官网下解绿色版,解压后会看到几个执行文件:DCServce.exe,DeltaC.exe,DeltaS.exe,DSetup.exe,rsync.exe,ssh.exe。

DeltaS.exe是服务端程序

DSetup.exe同上

DeltaC.exe是客户端程序

DCServce.exe是安装windows服务的程序

rsync.exe和ssh.exe就不用介绍了,同步和备份就靠它们了。

 

使用方法:

1) 配置服务端

我们需要先配置服务端,Deltacopy服务端可以理解成一个专用的备份服务器,客户端会把需要备份的东西推送到备份服务器上。

打开DeltaS.exe,会看到下图,配置一个虚拟目录,客户端就会把备份文件同步到这个目录内了。

然后把它注册成windows服务:

启动服务,服务端就配置好了。

 2)客户端配置

新增一个prfile,把刚刚配置的服务器信息填上去,用add folder增加一个需要备份的目录。

options内可以配置备份的一些参数

点击Modify Schedule,配置一下计划任务。配置好后就可以不用客户端了,定时自动会跑备份程序。

点Run Now,可以立即执行备份。

 

下图为备份状态:

cacti对mysql server的多端口监控

监控mysql server的性能,在cacti上内估计很多人都是用mysql-cacti-templates模板吧,但是它默认的配置只支持标准mysql 3306端口的监控。

其实它的脚本是已经支持多端口的,只是模板内的配置默认不支持而已。脚本的参数如下:

Usage: php ss_get_mysql_stats.php –host <host> –items <item,…> [OPTION]

   –host      Hostname to connect to; use host:port syntax to specify a port
               Use :/path/to/socket if you want to connect via a UNIX socket
   –items     Comma-separated list of the items whose data you want
   –user      MySQL username; defaults to root if not given
   –pass      MySQL password; defaults to 5MebCCNrzdPYpx3L if not given
   –heartbeat MySQL heartbeat table; defaults to ” (see mk-heartbeat)
   –nocache   Do not cache results in a file
   –port      MySQL port; defaults to 3306 if not given
   –mysql_ssl Add the MYSQL_CLIENT_SSL flag to mysql_connect() call

 

今天花了几个小时的时间把它改成支持多端口的了。

改起来也简单,每个Data Input要改两个地方,但就是数量比较多,眼都花了,累死人

1. 在Console -> Data Templates 找到mysql-cacti-templates的mysql模板,编辑:


在这里面把Port的Use Per-Data Source Value (Ignore this Value)选中,意思是由用户输入这个参数的值,然后保存。

把所有有关mysql模板都按上面的方法更改。

 

2. 在Console->Data Input Methods内,把所有有关mysql数据项的Port都改成不请允许为空。


取消选中Allow Empty Input,保存。

 

3. 上面全部改完后,在创建图型的时候会提示输入端口:


输入你自己的mysql server端口。然后点create就好了。

 

今天改好的模板我已导出,下面有下载地址,以便给需要的人使用。

多端口mysql模板用法:

1. 导入模板的xml文件到cacti

2. 把mysql-cacti-templates带的ss_get_mysql_stats.php文件放到cacti/scripts目录下便可。

多端口mysql模板是在better-cacti-templates-1.1.8基础上做的更改。

 

多端口mysql模板:http://farmerluo.googlecode.com/files/cacti_host_template_x_mysql_server_ht.xml

mysql-cacti-templates:http://code.google.com/p/mysql-cacti-templates/