通过远程 http API 来控制 lnmp 环境的重启perl脚本
#!/usr/bin/perl
use DBD::mysql;
use strict;
use warnings;
use DBI;
use utf8;
binmode(STDOUT, ':encoding(utf8)');
binmode(STDIN, ':encoding(utf8)');
binmode(STDERR, ':encoding(utf8)');
use Time::Local;
my $addtime=time();
my $dbh;
my ($a,$b,$c,$d,$f)=(,,,,);
sub getpid{
my $ser= pop @_;
my $pidinfo=`ps -ef |grep $ser|grep root |grep -v grep|awk '{print \$2}'`;
chomp $pidinfo;
return $pidinfo;
} sub re_mysql{
my $qpid=&getpid('mysql');
my $zhuangtai=`/etc/init.d/mysql restart`;
my $hpid=&getpid('mysql');
if($qpid != $hpid){
return ;
}
else {
return ;
}
} sub re_redis{
my $qpid=&getpid('redis');
my $redisstop= `/bin/kill - $qpid`;
my $redisstart= `/usr/local/redis-2.6./src/redis-server /etc/redis.conf`;
my $hpid=&getpid('redis');
if($qpid != $hpid){
return ;
}
else {
return ;
}
} sub re_ftp{
my $qpid=&getpid('pure-ftp');
my $a=`/etc/init.d/pureftpd restart`;
my $hpid=&getpid('pure-ftp');
if($qpid != $hpid){
return ;
}
else {
return ;
}
} sub re_php{
my $qpid=&getpid('php-cgi');
my $a=`/usr/local/php/sbin/php-fpm restart`;
my $hpid=&getpid('php-cgi');
if($qpid != $hpid){
return ;
}
else {
return ;
}
}
sub re_nginx{
my $qpid=&getpid('nginx');
my $a=`/usr/local/nginx/sbin/nginx -s reload`;
my $hpid=&getpid('nginx');
if($qpid != $hpid){
return ;
}
else {
return ;
}
} sub addsql {
my ($filename,$dir,$server,$cmd)=@_;
eval { $dbh = DBI->connect("DBI:mysql:database=systemcron;host=127.0.0.1","账户","密码", {'RaiseError' => });};
if ($@){
return ;
}
else{
my $sth = $dbh->prepare("INSERT INTO systemcron.croninfo (filename,dir,service,cmd,addtime) VALUES (?,?,?,?,?)");
eval {$sth->execute($filename,$dir,$server,$cmd,$addtime);};
if ($@){
$dbh->disconnect();
return ;
}
else{
$dbh->disconnect();
return ;
}
}
} sub addtosql {
my ($filename,$dir,$server,$addtime,$status)=@_;
my $operationtime=time();
eval { $dbh = DBI->connect("DBI:mysql:database=systemcron;host=127.0.0.1","账户","密码", {'RaiseError' => });};
if ($@){
return ;
}
else{
my $sth = $dbh->prepare("UPDATE systemcron.croninfo SET `status`=?,`operationtime`=? WHERE `filename`=? and `dir`=? and `service`=? and `addtime`=?");
eval {$sth->execute($status,$operationtime,$filename,$dir,$server,$addtime);};
if ($@){
$dbh->disconnect();
return ;
}
else{
$dbh->disconnect();
return ;
}
}
}
sub select{
my ($filename)=@_;
my $dbh = DBI->connect("DBI:mysql:database=systemcron;host=127.0.0.1","账户","密码", {'RaiseError' => });
my $sth = $dbh->prepare("SELECT * FROM `croninfo` WHERE `filename` =? and `status`= 1");
$sth->execute($filename);
$sth->fetchrow_array();
} my @ini=`curl "http:xxxx.com"`;
foreach (@ini){
my @inilist=split(" ",$_);
my ($filename,$dir,$server)=@inilist;
shift @inilist,$filename;
shift @inilist,$dir;
shift @inilist,$server;
my $cmd=join(" ",@inilist);
my $cmdsql=join("",@inilist);
if (&select($filename)){
print "OK\n";
}
else{
&addsql($filename,$dir,$server,$cmdsql);
`$cmd`;
`/usr/bin/rsync -vrptgo --progress --delete xxx.xxx.xxx.xxx::file/$filename /tmp/file/`;
`/bin/cp /tmp/file/$filename $dir`;
my @serlist=split(/\|/,$server);
foreach (@serlist){
if (/mysql/i){
$a=&re_mysql();
}
elsif (/redis/i){
$b=&re_redis();
}
elsif (/php-fpm/i){
$c=&re_php();
}
elsif (/ftp/i){
$d=&re_ftp();
}
elsif (/nginx/i){
$f=&re_nginx();
}
}
if ($a +$b +$c +$d +$f){
my $status=-;
&addtosql($filename,$dir,$server,$addtime,$status);
}
else{
my $status=;
&addtosql($filename,$dir,$server,$addtime,$status);
}
}
}
本脚本 通过 rsync 服务器 来抓取一些关键性的配置文件 并对客户端集群进行 配置文件分发 并能执行 以root身份执行 一些 shell, 可以通过API接口 来重启 mysql nginx php redis 并且记录进入数据库 并记录本次操作的执行结果,以便执行上次不成功的操作 本脚本 应当写入 crontab里面, 实现了类似 文件集中分发部署的效果。
通过远程 http API 来控制 lnmp 环境的重启perl脚本的更多相关文章
- linux搭建的LNMP环境下的mysql授权远程连接
用phpstudy搭建的lnmp环境下mysql授权远程连接 简单高效 这是因为mysql 里的优先级不是所有人(提前检查防火墙是关闭状态)1.使用phpstudy安装的mysql没有放置到可以直接调 ...
- 阿里云(ECS)Centos服务器LNMP环境搭建
阿里云( ECS ) Centos7 服务器 LNMP 环境搭建 前言 第一次接触阿里云是大四的时候,当时在校外公司做兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(还是 ...
- lnmp环境应用实践
LNMP 用户通过浏览器输入域名请求nginx web服务,如果请求时静态资源,则由nginx解析返回给用户:如果是动态请求(.php结尾),那么nginx就会把它通过FastCGI接口(生产常用方法 ...
- linux:lnmp环境搭建
一.准备工作(把安装环境需要使用到的包都下载好) mysql(官网):http://dev.mysql.com/downloads/ php(官网):http://php.net/downloads. ...
- 阿里云ECS安装lnmp环境-转载自:http://ninghao.net/blog/1368
远程控制你的服务器 远程控制 Linux 类型的系统的服务器,比如 CentOS 系统的服务器,一般不像 Windows 服务器那样,使用图形界面的远程控制.我们需要使用命令行工具,远程连接到服务器, ...
- LAMP坏境和LNMP环境安装Nagios4.1.1和基本配置
----------------------------------------以下内容为笔者生产环境的监控,安装都是经过一步步测试的-------------------------------- ...
- LNMP环境搭建笔记
说明:前面尝试的在ubuntu12.04上搭建的LAMP环境由于开发的需要需要对php的版本进行升级,然而通过apt-get库安装的php的版本是5.3.10,不能满足开发需要.此笔记安装的php的 ...
- LNMP环境下压力测试时的主要调试参数
LNMP环境下压力测试时的主要调试参数: 进行HTTP的压力测试时,很多时候会遇到很小的并发数,服务器就会出现不响应,或者连接超时,一般导致的原因有如下几点: 一.Nginx主要调试参数 主模块参数: ...
- CentOS 7 上搭建LNMP环境
(转自美团云知识库Chris) 简介 LNMP是Linux.Nginx.MySQL(MariaDB)和PHP的缩写,这个组合是最常见的WEB服务器的运行环境之一.本文将带领大家在CentOS 7操作系 ...
随机推荐
- zsh 命令提示符 PROMPT
使用上zsh后,发现命令提示符显示不了当前的路径,和一般的Linux系统默认提示不一致.配置自己的提示符: 更改配置文件.zshrc,添加配置PROMPT='%m:%. $',重新打开一个窗口生效. ...
- RxJava 学习笔记(一)
最近Android6.0的权限问题,要把之前的APP进行改造,用到了RxPermission框架!之前了解过RXJAVA,但是由于之前项目一直没有使用这个框架,所以也就一直搁置了.正好Rxpermis ...
- PPT演示快捷键
序号 快捷键作用 快捷键 1 从头开始放映 Ctrl+F5 2 从当前页开始放映 Shift+F5 3 隐藏/显示鼠标指针 Ctrl+H/U 4 标记笔 Ctrl+P 5 荧光笔 ...
- Python-基础数据类型
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...
- Windows远程桌面打印机映射
计算机的打印机驱动能打印,需要满足两个条件,一个是有打印驱动本身,一个是要有连接好了的端口.这样,打印作业就会被打印驱动程序封装成一种打印机能识别的组织形式,然后通过打印端口发送给打印机,然后打印! ...
- python求数字位数的方法
第一种:利用str()函数将数字转化成字符串,再利用len()函数判断位长. a=Int(raw_input("the number you want type in:") b=l ...
- 【NEUQACM OJ】1018: A+B again
1018: A+B again 题目描述 谷学长有一个非常简单的问题给你,给你两个整数A和B,你的任务是计算A+B. 输入 输入的第一行包含一个整数T(T<=20)表示测试实例的个数,然后2*T ...
- acm入门 杭电1001题 有关溢出的考虑
最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...
- 使用nose 进行Python项目的自动化测试
一.为什么使用nose? 编写测试更容易.nose可以自动识别继承于unittest.TestCase的测试单元,并执行测试,而且,nose也可以测试非继承于unittest.TestCase的测试单 ...
- Asp.net 配置web.Config 在出错时跳转到相应页面
<!--<customErrors mode="On" defaultRedirect="error.aspx"> <erro ...