#!/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. HTML中块级元素与行内元素

    一.行内元素与块级元素 块级元素列表 <address> 定义地址 <caption> 定义表格标题 <dd> 定义列表中定义条目 <div> 定义文档 ...

  2. LeetCode 206 Reverse a singly linked list.

    Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...

  3. 当年只会C# 所以写C++就成这样了! log4cplus -> log4net

    属实C++不会. 目前帮朋友弄个小项目需要小折腾一下. c# 一直采用 log4net ,c++的呢,找找有个log4cplus  知识有限,做个通用类吧.别把精力放在这里. 动手创建个静态类. 为了 ...

  4. docker学习

    一.基本概念1.Docker镜像 Docker镜像(Image)就是一个只读的模板. 例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或用户需要的其它应用程序. 镜像 ...

  5. java中的throw与throws的区别

    什么时运行时异常?什么是非运行时异常? 通俗的讲: 运行时异常:就是编译通过,运行时就崩了,比如数组越界. 非运行时异常:就是编译不通过,这时就得必须去处理了.不然就没法运行了. 全面的讲: Thro ...

  6. mysql 列类型

  7. 【Hibernate框架】flush机制

    背景: 一个偶然的机会,我做了一个例子,中间我遇到了一个有意思的问题,就是在执行commit方法之前,做了两次save操作,如下: SessionFactory sf = new Configurat ...

  8. Winform MDI窗体容器、权限、简单通讯

    MDI窗体容器: 一般来说,窗体是顶级容器,不允许放在其他任何容器内,但是如果将某个窗体的IsMdiContainer属性设置为True,那此窗体就会成为窗体容器,可以在其中放入其他窗体 在内部的窗体 ...

  9. 关于linux服务器上搭建ftp服务的流程

    小龙最近折腾了一个阿里云的服务器,买完了就要开始做那么多那么多的功课,小龙对ssh也是一知半解的状态,做个小笔记,发布下整个ftp服务的搭建过程,大神勿喷:) 一.aliyun Linux(Redha ...

  10. animation_Frame动画图片轮播

    我们刚接触的时候想弄一个轮播图片的一个小案例,但一开始我们以为和以前写java一样,要写一下方法,逻辑:但今天你学了这个Frame动画就可以轻松搞定!下面我们来看看这个Frame是怎么实现的. 第一步 ...