1
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
################################################################################
|
||||
#
|
||||
# use_jobs_subdirs_setup - utility to create directories and move files
|
||||
#
|
||||
# Copyright (C) 2010-2014 by Adaptive Computing Enterprises, Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This script may be used to move existing job files when the pbs_server
|
||||
# attribute, use_jobs_subdirs, has been set to true.
|
||||
#
|
||||
# Suggested procedure for moving existing job files when using the
|
||||
# use_jobs_subdirs pbs_server attribute (see documentation for
|
||||
# more information about this attribute):
|
||||
#
|
||||
# 1. Shut down the server
|
||||
# 2. Set the attribute in the server:
|
||||
# qmgr -c "set server use_jobs_subdirs = true"
|
||||
# 3. Run this script
|
||||
# use_jobs_subdirs_setup -m
|
||||
# 4. Restart the server
|
||||
#
|
||||
# Note that this only needs to be run one time. If the batch system is empty,
|
||||
# there is no need to use this script.
|
||||
#
|
||||
# Run use_jobs_subdirs_setup -h for a brief help message
|
||||
#
|
||||
################################################################################
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import glob
|
||||
import sys
|
||||
import getopt
|
||||
import re
|
||||
|
||||
|
||||
# Checks to see if the user has directories '0' - '9'
|
||||
# within default location for /jobs directory
|
||||
# and creates them if they are not there
|
||||
def create_direc(pbsvar):
|
||||
mypath = pbsvar + "/server_priv/jobs"
|
||||
os.chdir(pbsvar + "/server_priv/jobs")
|
||||
stat_info = os.stat(mypath)
|
||||
for x in range(0, 10):
|
||||
if (False == os.path.isdir(str(x))):
|
||||
os.mkdir(str(x))
|
||||
os.chown(mypath + "/" + str(x), stat_info.st_uid, stat_info.st_gid)
|
||||
mypath = pbsvar + "/server_priv/arrays"
|
||||
os.chdir(pbsvar + "/server_priv/arrays")
|
||||
stat_info = os.stat(mypath)
|
||||
for x in range(0, 10):
|
||||
if (False == os.path.isdir(str(x))):
|
||||
os.mkdir(str(x))
|
||||
os.chown(mypath + "/" + str(x), stat_info.st_uid, stat_info.st_gid)
|
||||
print("Directories Created Successfully")
|
||||
return
|
||||
# end create_direc()
|
||||
|
||||
|
||||
# uses the 'myfilename' param to find the number directly
|
||||
# before the first non-digit to know which
|
||||
# directory to put job file in
|
||||
def get_file_num(myfilename):
|
||||
m = re.search('^\d*(\d)[^\d]', myfilename)
|
||||
try:
|
||||
return m.group(1)
|
||||
except:
|
||||
return None
|
||||
# end get_file_num()
|
||||
|
||||
def move_file_clean(src_file, dst_file):
|
||||
# remove the destination file if it exists
|
||||
try:
|
||||
os.remove(dst_file)
|
||||
except:
|
||||
pass
|
||||
# move the file
|
||||
try:
|
||||
shutil.move(src_file, dst_file)
|
||||
except:
|
||||
sys.stderr.write("Could not move " + src_file + " to " + dst_file + "\n")
|
||||
|
||||
# moves all files from Path mypath
|
||||
# to subdirectories within original directory
|
||||
def move_file(pbsvar):
|
||||
os.chdir(pbsvar + "/server_priv/jobs/")
|
||||
mypath = pbsvar + "/server_priv/jobs/"
|
||||
for pat in ["*.BD", "*.JB", "*.SC", "*.TA"]:
|
||||
for name in glob.glob(pat):
|
||||
file_num = get_file_num(name)
|
||||
if file_num is not None:
|
||||
src_file = mypath + name
|
||||
dst_file = mypath + file_num + "/" + name
|
||||
move_file_clean(src_file, dst_file)
|
||||
|
||||
os.chdir(pbsvar + "/server_priv/arrays")
|
||||
mypath = pbsvar + "/server_priv/arrays/"
|
||||
for name in glob.glob("*.AR"):
|
||||
file_num = get_file_num(name)
|
||||
if file_num is not None:
|
||||
src_file = mypath + name
|
||||
dst_file = mypath + file_num + "/" + name
|
||||
move_file_clean(src_file, dst_file)
|
||||
|
||||
print("Files Moved into Folders")
|
||||
return
|
||||
# end move_file()
|
||||
|
||||
|
||||
# start usage()
|
||||
def usage():
|
||||
sys.stderr.write("usage: " + os.path.basename(__file__ + " -c | -m\n"))
|
||||
sys.stderr.write(" -c to create directories\n")
|
||||
sys.stderr.write(" -m to create directories and move files\n")
|
||||
sys.stderr.write(" -h for help\n")
|
||||
|
||||
|
||||
# start main()
|
||||
def main(pbsvar):
|
||||
|
||||
err = "ERROR: Option Not Recognized"
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "cmh")
|
||||
except getopt.GetoptError:
|
||||
sys.stderr.write(err + "\n")
|
||||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
opt_createdirs = False
|
||||
opt_mvfiles = False
|
||||
|
||||
for o, a in opts:
|
||||
if o == "-c":
|
||||
opt_createdirs = True
|
||||
elif o == "-m":
|
||||
opt_createdirs = True
|
||||
opt_mvfiles = True
|
||||
elif o == "-h":
|
||||
usage()
|
||||
sys.exit(3)
|
||||
else:
|
||||
assert False, "unhandled option"
|
||||
|
||||
if True == opt_createdirs:
|
||||
create_direc(pbsvar)
|
||||
if True == opt_mvfiles:
|
||||
move_file(pbsvar)
|
||||
if (False == opt_createdirs and False == opt_mvfiles):
|
||||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
return
|
||||
# end main()
|
||||
|
||||
|
||||
# Start script
|
||||
is_admin = os.getuid() == 0
|
||||
|
||||
# Checks to see if user has root privs
|
||||
# if not they get kicked out
|
||||
if (False == is_admin):
|
||||
sys.stderr.write("Error: Must be run with root privileges!!\n")
|
||||
sys.exit(1)
|
||||
|
||||
PBS_HOME = os.environ.get('PBS_HOME', '/var/spool/torque')
|
||||
|
||||
if (False == os.path.exists(PBS_HOME)):
|
||||
sys.stderr.write("ERROR: Path to PBS HOME does not exist\n")
|
||||
sys.exit(1)
|
||||
|
||||
main(PBS_HOME)
|
||||
sys.exit(0)
|
||||
# end of script
|
||||
Reference in New Issue
Block a user