Awight has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/345062 )

Change subject: --kill-job
......................................................................

--kill-job

Change-Id: Ia181aa495eabf34242293cb60904594ee3766b5c
---
M bin/run-job
M processcontrol/job_wrapper.py
M processcontrol/lock.py
3 files changed, 31 insertions(+), 7 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/process-control 
refs/changes/62/345062/1

diff --git a/bin/run-job b/bin/run-job
index 2ea0512..974c4f2 100755
--- a/bin/run-job
+++ b/bin/run-job
@@ -1,15 +1,40 @@
 #!/usr/bin/python
 
+from __future__ import print_function
 import argparse
+import subprocess
 import sys
 
 from processcontrol import job_wrapper
+
+
+def list_jobs():
+       for job_name in job_wrapper.list():
+               job = job_wrapper.load(job_name)
+               print("{job} - {human_name}".format(job=job_name, 
human_name=job.name))
+               status = job.status()
+               if status is not None:
+                       print(status)
+
+
+def kill_job(job_name):
+       job = job_wrapper.load(job_name)
+       status = job.status()
+       if status is None:
+               print("Nothing to kill.")
+       else:
+               pid = status["pid"]
+               print("Killing job {name}, pid {pid}".format(name=job_name, 
pid=pid))
+               exit_code = subprocess.call(["kill", str(pid)])
+               if exit_code != 0:
+                       print("Failed to kill!", file=sys.stderr)
 
 
 if __name__ == "__main__":
        parser = argparse.ArgumentParser(description="Run and maintain 
process-control jobs.")
        parser.add_argument("-j", "--job", help="Run a given job.", type=str)
        parser.add_argument("--list-jobs", help="Print a summary of available 
jobs.", action='store_true')
+       parser.add_argument("--kill-job", help="Kill a job by name", type=str)
        args = parser.parse_args()
 
        if args.job:
@@ -17,9 +42,7 @@
                job.run()
 
        if args.list_jobs:
-               for job_name in job_wrapper.list():
-                       job = job_wrapper.load(job_name)
-                       print("{job} - {human_name}".format(job=job_name, 
human_name=job.name))
-                       status = job.status()
-                       if status is not None:
-                               print(status)
+               list_jobs()
+
+       if args.kill_job:
+               kill_job(args.kill_job)
diff --git a/processcontrol/job_wrapper.py b/processcontrol/job_wrapper.py
index c99fcaf..d84b83e 100644
--- a/processcontrol/job_wrapper.py
+++ b/processcontrol/job_wrapper.py
@@ -144,7 +144,7 @@
         lock_path = "/tmp/{name}.lock".format(name=self.slug)
         if os.path.exists(lock_path):
             with open(lock_path, "r") as f:
-                pid = f.read().strip()
+                pid = int(f.read().strip())
                 # TODO: encapsulate
                 return {"status": "running", "pid": pid}
 
diff --git a/processcontrol/lock.py b/processcontrol/lock.py
index 6c91863..bbca472 100644
--- a/processcontrol/lock.py
+++ b/processcontrol/lock.py
@@ -39,6 +39,7 @@
 
     f = open(filename, "w")
     f.write(str(os.getpid()))
+    os.chmod(filename, 0o644)
     f.close()
 
     global lockfile

-- 
To view, visit https://gerrit.wikimedia.org/r/345062
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia181aa495eabf34242293cb60904594ee3766b5c
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/process-control
Gerrit-Branch: master
Gerrit-Owner: Awight <awi...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to