https://github.com/galaxyproject/galaxy
Raw File
Tip revision: 6304c816c9c5bd1bd60bedae42aa70b98bfeb1cf authored by John Chilton on 15 January 2015, 21:01:33 UTC
Bugfix: Skip extra wrapping around template-style macros.
Tip revision: 6304c81
drmaa_external_killer.py
#!/usr/bin/env python

"""
Terminates a DRMAA job if given a job id and (appropriate) user id.
"""

import errno
import json
import os
import pwd
import sys
#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("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()


back to top