Files
galaxy/scripts/drmaa_external_killer.py
T

69 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python
"""
Terminates a DRMAA job if given a job id and (appropriate) user id.
"""
import os
import sys
import errno
import pwd
#import drmaa
new_path = [ os.path.join( os.getcwd(), "lib" ) ]
new_path.extend( sys.path[1:] ) # remove scripts/ from the path
sys.path = new_path
from galaxy import eggs
import pkg_resources
pkg_resources.require("simplejson")
import simplejson as json
pkg_resources.require("drmaa")
import drmaa
def validate_paramters():
if len(sys.argv)<3:
sys.stderr.write("usage: %s [job ID] [user uid]\n" % sys.argv[0])
exit(1)
jobID = sys.argv[1]
uid = int(sys.argv[2])
return jobID, uid
def set_user(uid):
try:
gid = pwd.getpwuid(uid).pw_gid
os.setgid(gid)
os.setuid(uid)
except OSError, e:
if e.errno == errno.EPERM:
sys.stderr.write("error: setuid(%d) failed: permission denied. Did you setup 'sudo' correctly for this script?\n" % uid )
exit(1)
else:
pass
if os.getuid()==0:
sys.stderr.write("error: UID is 0 (root) after changing user. This script should not be run as root. aborting.\n" )
exit(1)
if os.geteuid()==0:
sys.stderr.write("error: EUID is 0 (root) after changing user. This script should not be run as root. aborting.\n" )
exit(1)
def main():
jobID, uid = validate_paramters()
set_user(uid)
s=drmaa.Session()
s.initialize()
s.control(jobID,drmaa.JobControlAction.TERMINATE)
s.exit()
if __name__ == "__main__":
main()