This is driving me nuts because I feel like it should be straightforward and I must be missing something basic.
I want to launch the caffeinate command on OS X before starting a job. Caffeinate takes a command as an argument, then goes into the background and keeps the machine awake until the command exits. I use this after waking machines up using a WOL script. When tested from the command line, caffeinate immediately backgrounds itself. However, when I try to run it as a Bacula ClientBeforeJob script, bacula-fd waits around forever for caffeiniate to exit. Here's what I've tried so far: - Having bacula run a script that then runs caffeinate. - Having bacula run a script that then runs caffeinate using nohup. - Having the script redirect stdin, stdout, and stderr of caffeinate to /dev/null - Adding an ampersand after the script in the bacula ClientBeforeJob specification. What invariably happens is the bash process created by bacula becomes a zombie and waits for caffeinate to exit. Inspecting the caffeinate process with lsof shows all of the file handles are redirected to /dev/null as expected, so I don't think this is a case of stdin or stdout causing problems. In all cases the only way to get bacula to finish the backup is to kill the script that caffeinate is running. I can't figure out why I can't get bacula-fd to move on after the script goes into the background. When I run the script manually from the command line it backgrounds immediately. The oddest thing is this worked fine on clients using bacula-fd version 7.4.x, but fails on a client using 9.2.0. Here's the script bacula-fd runs, as it currently stands: -- #!/bin/bash PATH=/bin:/usr/bin:/usr/local/bin # Script to prevent system sleep while bacula is working. # see bacula-idle-watch.sh for details. nohup caffeinate -s bacula-idle-watch.sh 2>&1 >/dev/null </dev/null & -- Here's the contents of bacula-idle-watch.sh; it just waits to exit until there's no bacula network connection anymore. caffeinate will terminate once the script exits. -- #!/bin/sh # This script delays a few minutes, then loops, checking for bacula-fd # connections. When there are none, it exits. # This is meant to be run with caffeinate in a bacula before-job script, # e.g. "caffeinate -s bacula-idle-watch.sh" # This will prevent the machine from idle-sleeping until bacula finishes. PATH=/bin:/usr/bin:/usr/sbin # We put a long delay here in case it takes bacula a while to get going. sleep 300 # Now loop while looking at the network connection. # We limit checks to once every five minutes because worst-case the machine # just waits an extra five minutes to sleep. while ( netstat -an | grep '\.9102.*ESTABLISHED' >/dev/null ) ; do sleep 300 done # Once the script exits, the wake-lock is released. exit 0 -- -- David Brodbeck System Administrator, Department of Mathematics University of California, Santa Barbara
_______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users