Description
This program will kill existing Cassandra before deploy new one.
Codes
import os
import shutil
import sys
import math
import urllib.request
import subprocess
import shlex
import signal
import time
import re
from datetime import date
def http_download(download_url, download_file):
with urllib.request.urlopen(download_url) as f:
with open(download_file,'wb') as target:
filesize = int(f.getheader('Content-Length'))
wrotesize = 0
while True:
if wrotesize == int(filesize):
break
wrotesize += target.write(f.read(1024))
download_percent = math.ceil((wrotesize/filesize)*100)
print('\rDownload {0} to {1} ... {2}%'.format(download_url,download_file,download_percent),end='')
print()
def find_pid_by_listen_port(port):
if sys.platform == 'win32':
output = subprocess.check_output('netstat -a -n -o', universal_newlines=True)
match = re.search('.*:{0} +.* +.+ +[0-9]+'.format(port),output)
if match:
return shlex.split(match.group(0))[-1]
else:
return None
else:
raise Exception('not support platform ' + sys.platform)
download_url = 'http://ftp.tc.edu.tw/pub/Apache/cassandra/2.0.4/apache-cassandra-2.0.4-bin.tar.gz'
download_file = 'd:/apache-cassandra-2.0.4-bin.tar.gz'
unzip_folder = 'd:/deploy/work/{0}/apache-cassandra-2.0.4-bin'.format(date.today().isoformat())
execute_folder = unzip_folder + '/apache-cassandra-2.0.4'
execute_path = execute_folder + '/bin/cassandra.bat'
executable = 'start cmd /c ' + execute_path
executable_argv = shlex.split(executable)
pid = find_pid_by_listen_port(9160)
if pid:
print('kill process id',pid)
os.kill(int(pid),signal.SIGTERM)
if os.path.exists('d:/deploy'):
print('Delete d:/deploy')
shutil.rmtree('d:/deploy')
http_download(download_url, download_file)
os.makedirs(unzip_folder)
print('unzip {0} to {1}'.format(download_file, unzip_folder))
shutil.unpack_archive(download_file, unzip_folder)
print('Execute',execute_path)
subprocess.Popen(executable_argv,shell=True)
沒有留言:
張貼留言