#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # Script cleanLocalHdd.py : listing de l'utilisation et nettoyage des disques locaux sur le cluster # import os, sys, subprocess def listByUser(user, nodesList): print("listing local disk use for user %s"%user) print("\t on nodes : %s"%nodesList) global nbnodes outFN = 'listLocalHddUse.out' out = open(outFN, "w") # ignore ne marche pas !!! (ai essayƩ toutes les combinaisons) #cmd1 = "ls -ldh /local/%s* --ignore='/local/lost+found'" %user cmd1 = "ls -ldh /local/%s*" %user cmd2 = "du -sh /local/%s* --exclude /local/lost+found " %user cmd="%s; %s"%(cmd1,cmd2) print(cmd) for inode in nodesList: print("\n\tNode%03d\n\t========"%(inode)) sshCmd = "ssh node%03d '%s'"%(inode, cmd) callOut = subprocess.call(sshCmd, shell=True) def delByUser(user, nodesList): print("deleting local disk dirs for user %s"%user) print("\t on nodes : %s"%nodesList) sure = input("are you sure ? (yes/No) : ") if sure=='' or sure.lower()!="yes": print("Aborted ...") return global nbnodes outFN = 'listLocalHddUse.out' out = open(outFN, "w") cmd2 = "rm -rf /local/%s*" %user print(cmd2) for inode in nodesList: print("\tNode%03d"%(inode)) cmd = "ssh node%03d '%s'"%(inode, cmd2) callOut = subprocess.call(cmd, shell=True) if __name__ == "__main__": nbnodes = 14 nodesList = list(range(1,nbnodes+1)) from optparse import OptionParser parser = OptionParser() parser.add_option("-u", "--user", dest="user", type="str", default=os.getenv('USER'), help="user name for listing or deletion. \"-u ''\" for all users") parser.add_option("-F", "--force", dest="force", default=False, action="store_true", help="force deletion for multi users or nodes") parser.add_option("-c", "--clean", dest="clean", default=False, action="store_true") parser.add_option("-n", "--nodes", dest="nodesList", type="int", action="append", help="number of nodes to check (multiple nodes allowed: -n 1 -n 3 ...)") (options, args) = parser.parse_args() print("options.nodesList=",options.nodesList) if options.nodesList: nodesList = options.nodesList if options.clean == True: if (options.user == '' or not options.nodesList)and options.force==False: print("Error deleting for all users or on all nodes not allowed without --force option") else: delByUser(options.user, nodesList) else: listByUser(options.user, nodesList)