torque_install/torque/contrib/use_jobs_subdirs_setup
ruoyunbai 2bb9621e30 1
2021-09-29 21:06:16 +08:00

177 lines
4.9 KiB
Python

#!/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