X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=tools.py;h=994089e1bb69fe5ab4ee43b35106d09b4c4a43e2;hb=76340d291da678c66699d74ee7f2be19c31300f0;hp=83f0327a7d5d3649f19e02fc68ea1ab23dd7eb5d;hpb=2bea6afe154924341f57f7b8633b9ca87b53b82f;p=nodemanager.git diff --git a/tools.py b/tools.py index 83f0327..994089e 100644 --- a/tools.py +++ b/tools.py @@ -10,7 +10,7 @@ import threading import logger -PID_FILE = '/var/run/node_mgr.pid' +PID_FILE = '/var/run/nm.pid' def as_daemon_thread(run): """Call function with no arguments in its own thread.""" @@ -36,10 +36,6 @@ def daemon(): devnull = os.open(os.devnull, os.O_RDWR) for fd in range(3): os.dup2(devnull, fd) -def deepcopy(obj): - """Return a deep copy of obj.""" - return cPickle.loads(cPickle.dumps(obj, -1)) - def fork_as(su, function, *args): """fork(), cd / to avoid keeping unused directories open, close all nonstandard file descriptors (to avoid capturing open sockets), fork() again (to avoid zombies) and call with arguments in the grandchild process. If is not None, set our group and user ids appropriately in the child process.""" child_pid = os.fork() @@ -76,12 +72,14 @@ def pid_file(): write_file(PID_FILE, lambda f: f.write(str(os.getpid()))) return other_pid -def write_file(filename, do_write): +def write_file(filename, do_write, **kw_args): """Write file atomically by opening a temporary file, using to write that file, and then renaming the temporary file.""" - os.rename(write_temp_file(do_write), filename) + os.rename(write_temp_file(do_write, **kw_args), filename) -def write_temp_file(do_write): +def write_temp_file(do_write, mode=None, uidgid=None): fd, temporary_filename = tempfile.mkstemp() + if mode: os.chmod(temporary_filename, mode) + if uidgid: os.chown(temporary_filename, *uidgid) f = os.fdopen(fd, 'w') try: do_write(f) finally: f.close()