#!/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脚本的更多相关文章

  1. linux搭建的LNMP环境下的mysql授权远程连接

    用phpstudy搭建的lnmp环境下mysql授权远程连接 简单高效 这是因为mysql 里的优先级不是所有人(提前检查防火墙是关闭状态)1.使用phpstudy安装的mysql没有放置到可以直接调 ...

  2. 阿里云(ECS)Centos服务器LNMP环境搭建

    阿里云( ECS ) Centos7 服务器 LNMP 环境搭建 前言 第一次接触阿里云是大四的时候,当时在校外公司做兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(还是 ...

  3. lnmp环境应用实践

    LNMP 用户通过浏览器输入域名请求nginx web服务,如果请求时静态资源,则由nginx解析返回给用户:如果是动态请求(.php结尾),那么nginx就会把它通过FastCGI接口(生产常用方法 ...

  4. linux:lnmp环境搭建

    一.准备工作(把安装环境需要使用到的包都下载好) mysql(官网):http://dev.mysql.com/downloads/ php(官网):http://php.net/downloads. ...

  5. 阿里云ECS安装lnmp环境-转载自:http://ninghao.net/blog/1368

    远程控制你的服务器 远程控制 Linux 类型的系统的服务器,比如 CentOS 系统的服务器,一般不像 Windows 服务器那样,使用图形界面的远程控制.我们需要使用命令行工具,远程连接到服务器, ...

  6. LAMP坏境和LNMP环境安装Nagios4.1.1和基本配置

    ----------------------------------------以下内容为笔者生产环境的监控,安装都是经过一步步测试的-------------------------------- ...

  7. LNMP环境搭建笔记

    说明:前面尝试的在ubuntu12.04上搭建的LAMP环境由于开发的需要需要对php的版本进行升级,然而通过apt-get库安装的php的版本是5.3.10,不能满足开发需要.此笔记安装的php的 ...

  8. LNMP环境下压力测试时的主要调试参数

    LNMP环境下压力测试时的主要调试参数: 进行HTTP的压力测试时,很多时候会遇到很小的并发数,服务器就会出现不响应,或者连接超时,一般导致的原因有如下几点: 一.Nginx主要调试参数 主模块参数: ...

  9. CentOS 7 上搭建LNMP环境

    (转自美团云知识库Chris) 简介 LNMP是Linux.Nginx.MySQL(MariaDB)和PHP的缩写,这个组合是最常见的WEB服务器的运行环境之一.本文将带领大家在CentOS 7操作系 ...

随机推荐

  1. MS Sql Server

    # 安装SQL2000时总是提示:以前的某个程序安装已经在安装计算机上创建挂起的文件操作 原文:https://zhidao.baidu.com/question/424367402.html # S ...

  2. react-native 踩坑记

    最近在使用react-native的时候遇到了很多坑,这里给大家分享下 一.样式 react-native 虽然支持flex布局,但是所有的样式均是css样式的一个很小的集合,尤其是在安卓机下问题尤为 ...

  3. Jquery便利对象

    xhr=[object object]    $.each(xhr, function (key, val) {                     alert(key + '=' + val); ...

  4. Python初探-购物车程序

    要求: 1,用户进入后,有欢迎语并提示用户输入本金 2.用户输入正确的内容后有购物菜单显示给用户 3.当用户的本金不足以购买商品的时候有提示余额不足并告知差额 4.成功购物后提示已购买内容和购买后的余 ...

  5. 了解 Spring Data JPA

    前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 B ...

  6. Hibernate注解方式配置-继承关系

    在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...

  7. Anaular指令详解

    目录:directive()   restrict   replace   template   templateUrl  scope  transclude   ng-transclude   co ...

  8. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法(mvc部分视图的添加)

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  9. java中的单例模式(懒汉式+饿汉式)

    什么是单例模式: 单例模式既只能在自己本类中创建有且唯一的一个实例(姑且不考虑映射的情况)通过方法将该实例对外公开 第一种:单例模式-懒汉式 既调用getInstance()方法返回实例之前判断有没有 ...

  10. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...