创新路
我们一直在努力

DIY Copy To Specially Directories

jwenshan阅读(179)评论(0)

将E盘wwwrootbackup目录下指定站点内容数据,复制到E盘wwwroot下对应网站目录名下

实现如下功能:

图片.png

图片.png

实现脚本如下:

::DIY Copy To  Specially  Directories
::Author: jerry
::Date:2018-6-21
@echo off
::创建变量
set pathwww="E:\wwwroot"
::获取目录名存放到一个临时文件,方便查看
dir /b %pathwww%>tmp.txt
::循环执行复制操作,将目录名作为循环变量个数循环。
for /f %%i in (tmp.txt) do (
xcopy E:\wwwrootbackup\%%i\www\*.*  E:\wwwroot\%%i\web /y /E )
echo. & pause
exit

图片.png

利用PYTHON读取ServerU配置信息,实现GEN6更换过程

jwenshan阅读(288)评论(0)

python:

#!/usr/bin/python
#author by jerry 2018.3.6
f = ()
lines = f.readlines()
mylist=[]
line lines:
    data=line.strip()
    (data) != :
        mylist.append(data)
user,passwd,QuotaMax =[],[],[]
flags=line mylist:
    line[:] == :
        flags == :
            user.pop()
            user.append(line.split()[-].split()[])
            flag = :
            user.append(line.split()[-].split()[])
    line[:] == :
        passwd.append(line[:])
        flags=line[:] == :
        QuotaMax.append(line.split()[-].split()[])
i ((user)-):
    fp = (+ (user[i]) +,)
    fp.write()
    fp.write()
    fp.write()
    fp.write(+ (passwd[i])+)
    fp.write()
    fp.write()
    fp.write()
    fp.write()
    fp.write(+ (user[i]) + + )
    fp.write(+ (user[i]) + )
    fp.write(+ (user[i]) + )
    fp.write(+ (user[i]) + )
    fp.write()
    fp.write()
    fp.write()

Python 发送邮件及附件

jwenshan阅读(331)评论(0)

#!/usr/bin/python

smtplib
email.mime.text MIMEText
email.header Header
string
email.parser Parser
email.mime.multipart MIMEMultipart
email.mime.application MIMEApplication
mybody=subject=message=MIMEMultipart()
mybody = MIMEText()
message.attach(mybody)
att1 =MIMEApplication((,).read(),=)
att1.add_header(, , =)
message.attach(att1)
att1=MIMEApplication ((,).read())
att1.add_header(, , =)
message.attach(att1)
att1=MIMEApplication ((,).read())
att1.add_header(, , =)
message.attach(att1)

headers = Parser().parsestr(% subject +% message +)
:
        server = smtplib.SMTP(host)
        server.login(user,authcode)  server.sendmail(sender,receivers,headers.as_string())
        server.quit() ()
smtplib.SMTPException e:
        (e)
        ()
没法上传图片,效果图就不显示了

Vmware Tools 配合SHell脚本实现自动正常关闭ESXI6.0过程

jwenshan阅读(468)评论(0)

Vmware Tools 配合SHell脚本实现自动正常关闭ESXI6.0过程

前提:ESXI主机中每台虚拟服务器需要安装Vmware Tools工具,再配合脚本使用,不然无法实现正常关机。

安装Vmware Tools:

afa2a2b33765c7200df1ab2bd173eb92.jpg

0e9886bef0bb8ee6418e132675da288f.jpg

判断是否安装VMWARE Tools工具

从ESXI上观察:

已经安装右击观察效果图:

462ad78c0b03d1c6209def08193900c5.jpg

没有安装Vmware Tools工具效果图: 

88caea33578dd74777ce6516635b6f60.jpg

当然也可以进系统查看:

如果已经安装成功系统服务里面可以看到Vmware Tools服务,如下图。

9738437712fbc2e7a15a291e2ead3fd4.jpg

注意在ESXI上虚拟服务器中如果没有安装Vmware Tools

使用命令:

一、vim-cmd vmsvc/power.off

二、esxcli vm process kill -t soft(hard/force) -w

关闭虚拟机,虽然可以关闭虚拟机,经反复测试是强制关闭电源,重新开启服务器会有非正常关机提示,同时系统日志也会有记录,如图。

1e3fa7e21b65dcad6aa44bc4de641cb8.jpg

eb2caa018af640cbd625f2c068e20131.jpg

如果使用:vim-cmd vmsvc/power.shutdown 命令关闭(没有安装Vmware Tools工具)esxi会有报错提示并且命令不会被成功执行。

cc33d8cf12018a8e2930bcfbecb9c5f5.jpg

来一张全图展示一下:(Vmware Tools)安装与没有安装的区别

7640008cf3fefa9b835602344726e255.jpg

最后该上关闭脚本:

#!/bin/sh

#author by jerry_江 2017

#正常关闭虚拟服务器及ESXI主机

off=`esxcli vm process list|grep World |awk '{print $3}'|wc -l`
status=`vim-cmd /hostsvc/hostsummary | grep inMaintenanceMode|cut -c 27`
if [ $off == 0 ] ;then
 
[ $status == "f" ] && vim-cmd hostsvc/maintenance_mode_enter
1&> /dev/null  && sleep 10 && halt || halt
else
hostsum=`vim-cmd vmsvc/getallvms|awk 'NR>1{print $1}'|wc -l`
vim-cmd vmsvc/getallvms|awk 'NR>1{print $1}'>tmp.txt
 
 for i in `seq 1 $hostsum`
do
vid=`sed -n "$i p" ./tmp.txt`
    on=`vim-cmd vmsvc/power.getstate $vid |tail -1|awk '{print $2}' 2&>/dev/null`
 if [ $on == on ] ;then
     vim-cmd vmsvc/power.shutdown $vid 1&>/dev/null
         sleep 5
 fi
   done
rm -rf ./tmp.txt
#强制关闭虚拟服务器及ESXI主机  
 off=`esxcli vm process list|grep World|awk '{print $3}'|wc -l`
 if [ $off == 0 ] ;then
      vim-cmd hostsvc/maintenance_mode_enter 1&> /dev/null
 sleep 10
   halt
    else
    ps |grep vmx|awk '{print $2}' |uniq  >tmp.txt   
    on=`ps |grep vmx|awk '{print $2}' |uniq |wc -l`
    for i in `seq 1 $on`         
     do                                
     hostid=`sed -n " $i p " ./tmp.txt`  
         kill $hostid 1&> /dev/null
     done            
 rm -rf ./tmp.txt
 vim-cmd hostsvc/maintenance_mode_enter 1&> /dev/null
     sleep 10
 halt
  fi
fi

Vmware
Tools配合以上关闭脚本(vim-cmd
vmsvc/power.shutdown)使用,关闭虚拟服务器,不会出现错误日志提示,如果出现则是后面的强制关闭脚本执行了(说明虚拟服务器有异常导致不能正常关闭,所以强制关闭了,可以查看虚拟服务器和ESXI日志排除,这里不做讨论,因为通常情况下服务器都是可以正常关闭的)。

批量复制一个文件到不同站点下指定目录(简易批处理脚本待优化)

邓建波阅读(433)评论(0)

  

    今天发现服务器上所有织梦站点下突然丢失了一个文件,路径是网站根目录下面/admin/template/view/mod_menu_item/  的 admin_list.php 这个文件都丢失了。

   发现这个问题后,第一时间我查看了服务器上所有的杀毒软件中的隔离文件,因为觉得有可能是误杀导致的。

经过一番查看,并没有在隔离文件中找到这个文件。那么此时的问题就是需要把这个admin_list.php文件拷贝到不同站点下的/admin/template/view/mod_menu_item/目录下。

   看了一下站点数量当时心里就是一凉,如果靠手动拷贝肯定是不行的。

   此时马上就想到能不能通过一个简单的批处理脚本完成这项工作呢?但是由于本人批处理水平有限,于是开始百度参考他人的批处理脚本,但是一番查找下来,发现类似情况的太少,而且很多都看不太明白。

   经过一番实验,发现要拷贝到指定的路径并不是太难,用xcopy即可完成拷贝,需要解决的问题就是路径问题。因为/admin/template/view/mod_menu_item/这段路径都是相同的,那我们需要解决的问题就是这段路径前面的站点文件夹路径。

突然发现,我们能不能先用dir命令先将目录下的文件名输出到一个txt文件中呢?于是,马上试了一下。又发现输出的内容里有多余的内容,但由于中间有空格,于是我使用了Excel表将无用参数剔除掉,此时就只剩下了站点目录名了。

   此时,即可使用一个for循环遍历这个txt文件里的目录名,再将变量插入到路径中,即可完成复制工作。

   实话说,这个方法并不是太好,但是本人批处理能力有限,而且这个方法足以解决目前的问题,于是就使用了这个笨办法。还有很多需要优化的地方,欢迎大家指正。

   此处纯属分享,大神请忽略,谢谢!

以下是批处理内容:

@echo off

for /f %%i in (test.txt) do (

xcopy D:\jianzhan\admin\template\view\mod_menu_item\admin_list.php C:\webroot\%%i\web\admin\template\view\mod_menu_item\

)

echo 复制完成!

pause

Python启动时报错的解决方案

scxp阅读(786)评论(0)

Windows中安装python3.6成功,但是启动时报错:

无法启动此程序,因为计算机中丢失 api-ms-win-crt-runtime-l1-1-0.dll。尝试重新安装该程序以解决此问题。 

1.jpg

如果你只是去网上下载一个api-ms-win-crt-runtime-l1-1-0.dll文件,然后放到system32目录里面,你会发现,其实是无法解决问题的。

2.jpg

api-ms-win-crt-runtime就是MFC的运行时环境的库,python在windows上编译也是用微软的visual studio C++编译的,底层也会用到微软提供的C++库和runtime库,安装Visual C++ Redistributable for Visual Studio 2015即可解决此问题。

链接:https://www.microsoft.com/zh-cn/download/details.aspx?id=48145

正常情况下,成功安装VC++2015后,python就可用了。

但是对于有些电脑系统,还会出现这些情况,提示安装失败: 

3.png

查看日志文件:

4.png

可以看到是更新程序出了问题,我们查看一下系统的事件, 

右击计算机->管理->左侧的 事件查看器->Windows日志->Setup,如下

5.png

我们查看他的详细信息,发现是有一个更新打不上:

6.png

本例是KB2999226这个补丁程序,你只需安装对应的补丁程序即可。

NFS安装详解

jwenshan阅读(370)评论(0)

执行命令:yum install nfs-utils( portmap nfs4-acl-tools)     rpcbind

编辑设置配置文件:vim /etc/exports


所遇问题:centos6.5

portmap: 未被识别的服务

解决方案:

由于在6系列里面,portmap已经改名了 ,6系列需要使用 service rpcbind start启动


启动rpcbind服务。



启动nfs服务


查看NFS服务器:


更新了/etc/exports后,使用如下命令刷新:

exportfs -r


挂载和卸载nfs文件系统使用:

[root@node4 ~]# clear

[root@node4 ~]# showmount -e 192.168.26.209

Export list for 192.168.26.209:

/data/nfs2 *

/data/nfs  *

[root@node4 ~]# mkdir /nfs

[root@node4 ~]# chmod 777 /nfs

[root@node4 ~]# mount -t nfs 192.168.26.209:/data/nfs /nfs

[root@node4 ~]# mount

/dev/mapper/vg1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

/dev/mapper/vg2-lv_data on /data type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

192.168.26.209:/data/nfs on /nfs type nfs (rw,vers=4,addr=192.168.26.209,clientaddr=192.168.26.218)

[root@node4 ~]# cd /nfs

[root@node4 nfs]# ls

CentOS-6.5-x86_64-bin-DVD1.iso

[root@node4 nfs]# umount -f /nfs

umount2: Device or resource busy

umount.nfs: /nfs: device is busy

umount2: Device or resource busy

umount.nfs: /nfs: device is busy

[root@node4 nfs]# cd

[root@node4 ~]# umount -f /nfs

[root@node4 ~]# mount

/dev/mapper/vg1-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

/dev/mapper/vg2-lv_data on /data type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

[root@node4 ~]# 






Window 2008 iis7.5服务器批量导出网站列表技巧

jwenshan阅读(404)评论(0)

      对于喜欢做站群的朋友来讲,批量处理是一个不可或缺的技巧,它能大大提升我们的工作效率,让我们把更多的时间转换到有技术含量的地方去,从而产生更高的价值,Window
2008 iis7.5服务器与2003系统不一样,Window2003
VPS服务器批量导出网站列表比较简单,而2008系统相对要复杂一点(当然,也可能是我没找到简单的方法)。那么Window 2008
iis7.5服务器要如何导出网站列表呢?

Window 2008 iis7.5服务器批量导出网站列表

Window 2008 iis7.5服务器批量导出网站列表

1.运行cmd > 输入:%windir%\system32\inetsrv\appcmd list site /config /xml > c:\sites.xml

2.然后回车

其中:xml是指文件格式,而 c:\sites.xml是指将列表文件直接导出到C盘,并将文件命名为sites.xml,这个是可以自定义的。

导出的文件用记事本打开,你可能会发现有很多多于的代码,这时候,我们可以把里面的内容复制到link114.cn,点击提取网址

link114提取网址

link114提取网址,即可得到服务器里所有运行的网站,如果你的网站都绑定了WWW,这里你可能需要批量替换下”www.”为空,然后放到link114再提取一次,得到所有网站。

S先生任务成果源码 C#

黄振宇阅读(458)评论(0)

WindowsForms 20170823.rar

总体思路:

1、界面主线程:启动任务线程,通过ODBC读取EXCEL数据至ArrayList动态数组sA\sB\sIP

2、任务主线程:启动Monitor线程控制主界面显示进度

2、任务主线程:循环数组筛出C表,实例化为WebSite类实例写入sC,并写入Access数据库以便人工核对数据(耗时2秒主要花在写入过程,可以省略)

3、任务主线程:循环调用sC中对象的Start(1)方法获取IP,对象同时自我标记是否在我司IP中(每个对象会独立启动新线程异步查询IP,并将结果通知到主线程)

4、任务主线程:当发现所有对象返回结果之后,开始写入Access数据(3、4步骤耗时24秒)

5、任务主线程:循环调用sC中,是我司IP的对象的Start(2)方法获取网页状态(同样异步查询通知主线程)

6、任务主线程:所有对象返回结果之后,开始写入数据(5、6步骤消耗3秒),退出任务线程

难点分析:

1、 多线程应用最大的问题是资源争用。

    最开始我尝试每初始化一个对象,该对象立即执行查询IP和网站可用性查询,并直接将结果写入文件EXCEL,但并发实在太大,导致写入会失败。又换成写入TXT,硬IO更高,读写锁会导致文件锁死。又换成ACCESS数据库,还是只能部分写入数据。

    尝试优化成两步,先查询IP并写入,完成之后再查询网站状态并写入。还是偶发写入失败。

    最终找到的解决方案:读写分离,多线程查询,返回所有结果之后通过单线程写入。程序90%的代码都在处理多线程之间的关系及数据写入,这个过程就花费了5个小时来探索,一共才用了6个小时。

2、 监控多线程数据执行过程。

    最开始是每个对象执行完毕主动更新主界面数据,但执行非常频繁,导致主界面卡死。最终方案,对象执行完毕更新计数器,通过独立的监控进程,每秒根据计数器显示结果到主界面。虽然界面看起来简单,但花了很多功夫。

优化空间:

    1、目前程序一次性启动所有符合条件的WebSite对象查询自己的IP和网站可用性,会直接将CPU占满,并没有设计多线程调度控制模块,可以增加此模块控制任务数以免宕机。

    2、界面可增加进度条显示及源文件路径选择。

感想:

    多线程开发又多了不少感悟。如果单线程写,我只要半小时,几十行代码。换成多线程就花了6个小时,最复杂部分却并不是核心功能代码…体会到要开发简单、易用的程序真不是想当然的觉得容易,为了结果化繁为简,过程就要化简为繁。

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机