通过远程 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操作系 ...
随机推荐
- Python 创建本地服务器环境生成二维码
一. 需求 公司要做一个H5手机端适配页面,因技术问题所以H5是外包的,每次前端给我们源码,我们把源码传到服务器让其他人访问看是否存在bug,这个不是很麻烦吗?有人说,可以让前端在他们的服务器上先托管 ...
- 【DWR系列02】-DWR逆向Ajax即服务器推送
.literal { background-color: #f2f2f2; border: 1px solid #cccccc; padding: 1px 3px 0; white-space: no ...
- [UWP]创建自定义VisualState Trigger
这篇博客将介绍在UWP程序中如何创建和使用自定义VisualState Trigger. 上一篇博客中介绍了如何使用AdaptiveTrigger.目前UWP内置的StateTrigger只有Adap ...
- 指令<AngularJs>
对于指令,可以把它简单的理解成在特定DOM元素上运行的函数,指令可以扩展这个元素的功能. 首先来看个完整的参数示例再来详细的介绍各个参数的作用及用法: angular.module('myApp', ...
- UWP学习记录3-设计和UI之样式
UWP学习记录3-设计和UI之样式 1.颜色 在系统的“设置”>“个性化”>“颜色”里,提供了主题色选择.选定主题色后,会根据颜色亮度的 HSB 值创建浅色和深色的主题色. 应用可使用阴影 ...
- MongoDB做为一项windows服务启动
MongoDB做为一项windows服务启动 Windows版本安装 MongoDB的官方下载站是http://www.mongodb.org/downloads,可以去上面下载最新的对应版本,有32 ...
- Ubuntu菜鸟入门(八)—— QQ安装
一.下载 http://www.ubuntukylin.com/application/show.php?lang=cn&id=279 二.安装流程 1.解压,到解压文件夹中运行 sudo d ...
- python 爬虫(二)
python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...
- 代替jquery $.post 跨域提交数据的N种形式
跨域的N种形式: 1.直接用jquery中$.getJSON进行跨域提交 优点:有返回值,可直接跨域: 缺点:数据量小: 提交方式:仅get (无$.postJSON) $.getJSON(" ...
- POJ No.2386【B007】
[B007]Lake Counting[难度B]—————————————————————————————————————————— [Description] Due to recent rains ...